MachineSettings:本体のクリーンアップ項目(内部的にはNAMUT_Formatを呼ぶ)を追加。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1129 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
nishikawa_takeshi 2008-04-14 09:44:55 +00:00
parent 6c8e58e242
commit 0a25a4dc45
5 changed files with 340 additions and 6 deletions

View File

@ -51,7 +51,7 @@ BG_DIR = ../../data
SRCS = main.c MachineSetting.c \
setRTC.c selectLanguage.c calibrationTP.c setOwnerInfo.c selectCountry.c \
setParentalControl.c setFreeSoftBox.c setWireless.c\
setParentalControl.c setFreeSoftBox.c setWireless.c cleanupMachine.c \
CountryNameMappingData.c \
$(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c \
$(BG_DIR)/BGData_MachineSettings.c
@ -64,7 +64,11 @@ MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \
MAKETAD_FLAGS += -s
LLIBRARIES = libsea$(TWL_LIBSUFFIX).a
LLIBRARIES = libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \
libnam$(TWL_LIBSUFFIX).a \
libsea$(TWL_LIBSUFFIX).a \
libnamut$(TWL_LIBSUFFIX).a
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs

View File

@ -33,9 +33,9 @@
#define OK_BUTTON_BOTTOM_Y ( OK_BUTTON_TOP_Y + 2 * 8 )
#ifdef BROADON_ENABLE
#define SETTING_MENU_ELEMENT_NUM 8 // メインメニューの項目数(※ピクトチャット起動テストは除いておく)
#define SETTING_MENU_ELEMENT_NUM 9 // メインメニューの項目数(※ピクトチャット起動テストは除いておく)
#else
#define SETTING_MENU_ELEMENT_NUM 7
#define SETTING_MENU_ELEMENT_NUM 8
#endif
// extern data------------------------------------------
@ -127,6 +127,16 @@ static const u16 *const s_pStrSettingElemTbl[ SETTING_MENU_ELEMENT_NUM ][ LCFG_T
(const u16 *)L"WIRELESS(C)",
(const u16 *)L"WIRELESS(K)",
},
{
(const u16 *)L"本体のクリーンアップ",
(const u16 *)L"MACHINE CLEAN UP",
(const u16 *)L"MACHINE CLEAN UP(F)",
(const u16 *)L"MACHINE CLEAN UP(G)",
(const u16 *)L"MACHINE CLEAN UP(I)",
(const u16 *)L"MACHINE CLEAN UP(S)",
(const u16 *)L"MACHINE CLEAN UP(C)",
(const u16 *)L"MACHINE CLEAN UP(K)",
},
#ifdef BROADON_ENABLE
{
(const u16 *)L"ƒtƒŠ<EFBFBD>\ƒtƒgBOX",
@ -154,10 +164,11 @@ static const u16 *const s_pStrSettingElemTbl[ SETTING_MENU_ELEMENT_NUM ][ LCFG_T
};
static MenuPos s_settingPos[] = {
{ TRUE, 4 * 8, 4 * 8 },
{ TRUE, 4 * 8, 6 * 8 },
{ TRUE, 4 * 8, 8 * 8 },
{ TRUE, 4 * 8, 10 * 8 },
{ TRUE, 4 * 8, 12 * 8 },
{ TRUE, 4 * 8, 10 * 8 },
{ TRUE, 4 * 8, 12 * 8 },
{ TRUE, 4 * 8, 14 * 8 },
{ TRUE, 4 * 8, 16 * 8 },
{ TRUE, 4 * 8, 18 * 8 },
@ -270,6 +281,10 @@ int MachineSettingMain( void )
g_pNowProcess = SetWirelessMain;
break;
case 7:
CleanupMachineInit();
g_pNowProcess = CleanupMachineMain;
break;
case 8:
SetFreeSoftBoxInit();
g_pNowProcess = SetFreeSoftBoxMain;
break;

View File

@ -75,6 +75,8 @@ extern void SetWirelessInit( void );
extern int SetWirelessMain( void );
extern void SetFreeSoftBoxInit( void );
extern int SetFreeSoftBoxMain( void );
extern void CleanupMachineInit( void );
extern int CleanupMachineMain( void );
extern void DrawOKCancelButton( void );
extern void CheckOKCancelButton(BOOL *tp_ok, BOOL *tp_cancel);

View File

@ -0,0 +1,310 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: cleanupMachine.c
Copyright 2007 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.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#include <twl.h>
#include <sysmenu/namut.h>
#include "misc.h"
#include "MachineSetting.h"
//
// <処理>
// NANDの初期化処理(擬似フォーマット)
//
// <例外処理>
//
// テスト表示
#if 1
#define DEBUGPRINT OS_TPrintf
#else
#define DEBUGPRINT(...) ((void)0)
#endif
// define data----------------------------------
// 戻るボタン領域
#define RETURN_BUTTON_TOP_X ( 2 * 8 )
#define RETURN_BUTTON_TOP_Y ( 21 * 8 )
#define RETURN_BUTTON_BOTTOM_X ( RETURN_BUTTON_TOP_X + (8 * 8) )
#define RETURN_BUTTON_BOTTOM_Y ( RETURN_BUTTON_TOP_Y + (2 * 8) )
// OKボタン領域
#define OK_BUTTON_TOP_X ( 26 * 8 )
#define OK_BUTTON_TOP_Y ( 21 * 8 )
#define OK_BUTTON_BOTTOM_X ( OK_BUTTON_TOP_X + (4 * 8) )
#define OK_BUTTON_BOTTOM_Y ( OK_BUTTON_TOP_Y + (2 * 8) )
// YES/NOボタン領域
#define YES_BUTTON_TOP_X ( 8 * 8 )
#define YES_BUTTON_TOP_Y ( 8 * 8 )
#define YES_BUTTON_BOTTOM_X ( YES_BUTTON_TOP_X + (3 * 8) )
#define YES_BUTTON_BOTTOM_Y ( YES_BUTTON_TOP_Y + (2 * 8) )
#define NOT_BUTTON_TOP_X ( 18 * 8 )
#define NOT_BUTTON_TOP_Y ( 8 * 8 )
#define NOT_BUTTON_BOTTOM_X ( NOT_BUTTON_TOP_X + (2 * 8) )
#define NOT_BUTTON_BOTTOM_Y ( NOT_BUTTON_TOP_Y + (2 * 8) )
#define KEY_OK 0xffff
#define KEY_RETURN 0xfffe
#define KEY_YES 0xfffd
#define KEY_NOT 0xfffc
// extern data----------------------------------
extern u32 bg_char_data[8 * 6];
extern u16 bg_scr_data[32 * 32];
extern u16 bg_birth_scr_data[32 * 32];
// function's prototype-------------------------
// static variable------------------------------
// 一時的にしか使わない物をstaticにしているので
// 少しでもダイエットしたい時はWork扱いにしてAlloc→Freeしましょう
typedef enum
{
MS_FORMATMACHINE_SELECT, // ユーザ選択中
MS_FORMATMACHINE_PROCESSING, // 処理中
MS_FORMATMACHINE_ERROR, // エラー発生
MS_FORMATMACHINE_SUCCESS // 成功
} eState;
static BOOL sbInit = FALSE; // 初期化するかどうか
static eState sState = MS_FORMATMACHINE_SELECT; // 現在の実行状態
// const data-----------------------------------
// ++ メインメニュー
//=========================================================
//
// ボタンのタッチ処理
//
//=========================================================
// 戻るボタン専用SelectSomethingFuncの実装
static BOOL SelectReturnFunc( u16 *csr, TPData *tgt )
{
BOOL ret;
ret = WithinRangeTP( RETURN_BUTTON_TOP_X, RETURN_BUTTON_TOP_Y,
RETURN_BUTTON_BOTTOM_X, RETURN_BUTTON_BOTTOM_Y, tgt );
if(ret) *csr = KEY_RETURN;
return ret;
}
// OKボタン専用SelectSomethingFuncの実装
static BOOL SelectOKFunc( u16 *csr, TPData *tgt )
{
BOOL ret;
ret = WithinRangeTP( OK_BUTTON_TOP_X, OK_BUTTON_TOP_Y,
OK_BUTTON_BOTTOM_X, OK_BUTTON_BOTTOM_Y, tgt );
if(ret) *csr = KEY_OK;
return ret;
}
// ON/OFFボタン専用SelectSomethingFuncの実装
static BOOL SelectYESFunc( u16 *csr, TPData *tgt )
{
BOOL ret;
ret = WithinRangeTP( YES_BUTTON_TOP_X, YES_BUTTON_TOP_Y,
YES_BUTTON_BOTTOM_X, YES_BUTTON_BOTTOM_Y, tgt );
if(ret) *csr = KEY_YES;
return ret;
}
static BOOL SelectNOTFunc( u16 *csr, TPData *tgt )
{
BOOL ret;
ret = WithinRangeTP( NOT_BUTTON_TOP_X, NOT_BUTTON_TOP_Y,
NOT_BUTTON_BOTTOM_X, NOT_BUTTON_BOTTOM_Y, tgt );
if(ret) *csr = KEY_NOT;
return ret;
}
// パッドのキーの長押しを検出(ReadPad()を呼び出しているループ内で呼ばれる必要がある)
static u16 DetectPadRepeat( void )
{
static u8 repcount[12]; // 各キーが長押しされているフレーム数
u16 rep = 0;
int i;
for( i=0; i < 12; i++ ) // 全部のキーについて
{
if( pad.trg & ((u16)(0x0001 << i)) ) // 押されたらカウントし始める
{
repcount[i] = 1;
}
else if( pad.cont & ((u16)(0x0001 << i)) )
{
if( repcount[i] > 25 ) // ある一定以上のフレーム数押されていたら長押しされていたと判定
{
rep = (u16)(rep | (u16)(0x0001 << i));
repcount[i] = 25 - 10;
}
else
{
repcount[i]++;
}
}
else
{
repcount[i] = 0;
}
}
return rep;
}
//=========================================================
//
// メインメニュー
//
//=========================================================
// 描画
static void DrawCleanupMachineScene( void )
{
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL );
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"MACHINE CLEAN UP" );
PutStringUTF16( 4*8, 4*8, TXT_COLOR_BLUE, (const u16 *)L"Start Cleaning?" );
if( sbInit )
{
PutStringUTF16( YES_BUTTON_TOP_X-1*8, YES_BUTTON_TOP_Y, TXT_COLOR_GREEN, (const u16*)L">YES<" );
PutStringUTF16( NOT_BUTTON_TOP_X-1*8, NOT_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16*)L" NO" );
}
else
{
PutStringUTF16( YES_BUTTON_TOP_X-1*8, YES_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16*)L" YES" );
PutStringUTF16( NOT_BUTTON_TOP_X-1*8, NOT_BUTTON_TOP_Y, TXT_COLOR_GREEN, (const u16*)L">NO<" );
}
// 実行状況によって表示が異なる
switch( sState )
{
case MS_FORMATMACHINE_SELECT:
PutStringUTF16( OK_BUTTON_TOP_X, OK_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16 *)L"<EFBFBD>OK" );
break;
case MS_FORMATMACHINE_PROCESSING:
PutStringUTF16( 4*8, 12*8, TXT_COLOR_GREEN, (const u16*)L"In Processing..." );
break;
case MS_FORMATMACHINE_ERROR:
PutStringUTF16( 4*8, 12*8, TXT_UCOLOR_G0, (const u16*)L"In Processing..." );
PutStringUTF16( 4*8, 14*8, TXT_COLOR_RED, (const u16*)L"ERROR!" );
PutStringUTF16( RETURN_BUTTON_TOP_X, RETURN_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16 *)L"<EFBFBD>RETURN" );
break;
case MS_FORMATMACHINE_SUCCESS:
PutStringUTF16( 4*8, 12*8, TXT_UCOLOR_G0, (const u16*)L"In Processing..." );
PutStringUTF16( 4*8, 14*8, TXT_COLOR_GREEN, (const u16*)L"Completed!" );
PutStringUTF16( RETURN_BUTTON_TOP_X, RETURN_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16 *)L"<EFBFBD>RETURN" );
break;
default:
DEBUGPRINT( "invalid state\n" );
break;
}
}
// 初期化
void CleanupMachineInit( void )
{
// BGデータのロード処理
GX_LoadBG1Char(bg_char_data, 0, sizeof(bg_char_data));
GX_LoadBG1Scr(bg_scr_data, 0, sizeof(bg_scr_data));
DrawCleanupMachineScene();
SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 );
GX_SetVisiblePlane ( GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1);
GXS_SetVisiblePlane( GX_PLANEMASK_BG0 );
sbInit = FALSE;
sState = MS_FORMATMACHINE_SELECT; // 初期状態
}
// メニューから呼ばれるメイン
int CleanupMachineMain( void )
{
SelectSomethingFunc funcSelect[3]={SelectOKFunc, SelectYESFunc, SelectNOTFunc};
SelectSomethingFunc funcFinish[1]={SelectReturnFunc};
BOOL tpCommit = FALSE;
static u16 commit;
ReadTP();
// タッチできるボタンは実行状況によって異なる
switch( sState )
{
case MS_FORMATMACHINE_SELECT:
if( (pad.trg & PAD_KEY_LEFT) || (pad.trg & PAD_KEY_RIGHT) )
{
sbInit = !sbInit;
}
tpCommit = SelectSomethingByTP( &commit, funcSelect, 3 ); // 選択とOKのみ
if( tpCommit && (commit==KEY_YES) )
{
sbInit = TRUE;
}
else if( tpCommit && (commit == KEY_NOT) )
{
sbInit = FALSE;
}
if( (pad.trg & PAD_BUTTON_A) || (tpCommit && (commit == KEY_OK)) )
{
if( sbInit )
{
sState = MS_FORMATMACHINE_PROCESSING; // 遷移
}
else
{
MachineSettingInit();
return 0;
}
}
break;
case MS_FORMATMACHINE_PROCESSING:
// 選択を受け付けない
if( !NAMUT_Format() ) // 初期化実行
{
sState = MS_FORMATMACHINE_ERROR;
}
else
{
sState = MS_FORMATMACHINE_SUCCESS;
}
break;
case MS_FORMATMACHINE_ERROR:
case MS_FORMATMACHINE_SUCCESS:
tpCommit = SelectSomethingByTP( &commit, funcFinish, 1 ); // Returnのみ
if( (pad.trg & PAD_BUTTON_B) || (tpCommit && (commit == KEY_RETURN)) )
{
MachineSettingInit();
return 0;
}
break;
}
// 再描画
DrawCleanupMachineScene();
return 0;
}

View File

@ -70,6 +70,9 @@ void TwlMain(void)
// システムの初期化------------------
InitAllocator();
// NAMライブラリ初期化
NAM_Init( Alloc, Free ); // NAMUTライブラリがNAMライブラリを使用している
// ※本来ならランチャーからのパラメータチェックを行い、
// 初回起動シーケンスに入るパスがある