From 4ea086ddc79e7f631feddd9067e00dfa2a0944ff Mon Sep 17 00:00:00 2001 From: nishikawa_takeshi Date: Fri, 4 Apr 2008 02:20:59 +0000 Subject: [PATCH] =?UTF-8?q?MachineSettings:=E7=84=A1=E7=B7=9A=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E3=83=95=E3=83=A9=E3=82=B0=E8=A8=AD=E5=AE=9A=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E3=80=82BroadOn=E7=94=A8=E3=81=AB=E9=A0=85=E7=9B=AE?= =?UTF-8?q?=E3=82=92=E5=88=87=E3=82=8A=E6=9B=BF=E3=81=88=E3=82=8B=E3=83=93?= =?UTF-8?q?=E3=83=AB=E3=83=89=E3=82=AA=E3=83=97=E3=82=B7=E3=83=A7=E3=83=B3?= =?UTF-8?q?#define=E3=80=80BROADON=5FENABLE=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1061 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../MachineSettings/ARM9/Makefile | 2 +- .../MachineSettings/ARM9/src/MachineSetting.c | 25 +- .../MachineSettings/ARM9/src/MachineSetting.h | 4 + .../MachineSettings/ARM9/src/setWireless.c | 443 ++++++++++++++++++ 4 files changed, 467 insertions(+), 7 deletions(-) create mode 100644 build/systemMenu_RED/MachineSettings/ARM9/src/setWireless.c diff --git a/build/systemMenu_RED/MachineSettings/ARM9/Makefile b/build/systemMenu_RED/MachineSettings/ARM9/Makefile index a44f3720..256d683f 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/Makefile +++ b/build/systemMenu_RED/MachineSettings/ARM9/Makefile @@ -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\ + setParentalControl.c setFreeSoftBox.c setWireless.c\ CountryNameMappingData.c \ $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c \ $(BG_DIR)/BGData_MachineSettings.c diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c b/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c index 8651647f..601b7563 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c @@ -21,8 +21,6 @@ // define data------------------------------------------ -//#define FREEBOX_ENABLE - // キャンセルボタンLCD領域 #define CANCEL_BUTTON_TOP_X ( 12 * 8 ) #define CANCEL_BUTTON_TOP_Y ( 21 * 8 ) @@ -34,10 +32,10 @@ #define OK_BUTTON_BOTTOM_X ( OK_BUTTON_TOP_X + 2 * 8 ) #define OK_BUTTON_BOTTOM_Y ( OK_BUTTON_TOP_Y + 2 * 8 ) -#ifdef FREEBOX_ENABLE -#define SETTING_MENU_ELEMENT_NUM 7 // メインメニューの項目数(※ピクトチャット起動テストは除いておく) +#ifdef BROADON_ENABLE +#define SETTING_MENU_ELEMENT_NUM 8 // メインメニューの項目数(※ピクトチャット起動テストは除いておく) #else -#define SETTING_MENU_ELEMENT_NUM 6 +#define SETTING_MENU_ELEMENT_NUM 7 #endif // extern data------------------------------------------ @@ -119,7 +117,17 @@ static const u16 *const s_pStrSettingElemTbl[ SETTING_MENU_ELEMENT_NUM ][ LCFG_T (const u16 *)L"PARENTAL CONTROL(C)", (const u16 *)L"PARENTAL CONTROL(K)", }, -#ifdef FREEBOX_ENABLE + { + (const u16 *)L"無線設定", + (const u16 *)L"WIRELESS", + (const u16 *)L"WIRELESS(F)", + (const u16 *)L"WIRELESS(G)", + (const u16 *)L"WIRELESS(I)", + (const u16 *)L"WIRELESS(S)", + (const u16 *)L"WIRELESS(C)", + (const u16 *)L"WIRELESS(K)", + }, +#ifdef BROADON_ENABLE { (const u16 *)L"フリーソフトBOX", (const u16 *)L"FREESOFT BOX", @@ -154,6 +162,7 @@ static MenuPos s_settingPos[] = { { TRUE, 4 * 8, 16 * 8 }, { TRUE, 4 * 8, 18 * 8 }, { TRUE, 4 * 8, 20 * 8 }, + { TRUE, 4 * 8, 22 * 8 }, }; @@ -257,6 +266,10 @@ int MachineSettingMain( void ) g_pNowProcess = SetParentalControlMain; break; case 6: + SetWirelessInit(); + g_pNowProcess = SetWirelessMain; + break; + case 7: SetFreeSoftBoxInit(); g_pNowProcess = SetFreeSoftBoxMain; break; diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.h b/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.h index 183485b8..ea15e170 100644 --- a/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.h +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.h @@ -35,6 +35,8 @@ extern "C" { #define HANDLE_OK_BUTTON 255 #define HANDLE_CANCEL_BUTTON 256 +//#define BROADON_ENABLE // BroadOn用に設定項目を切り替える + // 数値入力インターフェース用ワーク(void InputDecimal()で使用) typedef struct InputNumParam { u16 pos_x; // 入力値の表示X位置 @@ -69,6 +71,8 @@ extern void SelectCountryInit( void ); extern int SelectCountryMain( void ); extern void SetParentalControlInit( void ); extern int SetParentalControlMain( void ); +extern void SetWirelessInit( void ); +extern int SetWirelessMain( void ); extern void SetFreeSoftBoxInit( void ); extern int SetFreeSoftBoxMain( void ); diff --git a/build/systemMenu_RED/MachineSettings/ARM9/src/setWireless.c b/build/systemMenu_RED/MachineSettings/ARM9/src/setWireless.c new file mode 100644 index 00000000..d15e0419 --- /dev/null +++ b/build/systemMenu_RED/MachineSettings/ARM9/src/setWireless.c @@ -0,0 +1,443 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL + File: setFreeSoftBox.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 +#include "misc.h" +#include "MachineSetting.h" + +// +// <処理> +// 以下の無線の設定 +// ++ ON/OFFフラグ +// +// <例外処理> +// + +// テスト表示 +#if 1 +#define DEBUGPRINT OS_TPrintf +#else +#define DEBUGPRINT(...) ((void)0) +#endif + +// define data---------------------------------- + +// ソフトウェアキーボードLCD領域 +#define CLIST_LT_X 23 +#define CLIST_LT_Y 50 +#define CLIST_MARGIN 14 +#define CLIST_KEY_PER_SEGMENT 5 +#define CLIST_SEGMENT_INTERVAL 7 + +// キャンセルボタン領域 +#define CANCEL_BUTTON_TOP_X ( 2 * 8 ) +#define CANCEL_BUTTON_TOP_Y ( 21 * 8 ) +#define CANCEL_BUTTON_BOTTOM_X ( CANCEL_BUTTON_TOP_X + (8 * 8) ) +#define CANCEL_BUTTON_BOTTOM_Y ( CANCEL_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) ) + +// ON/OFFボタン領域 +#define ON_BUTTON_TOP_X ( 8 * 8 ) +#define ON_BUTTON_TOP_Y ( 8 * 8 ) +#define ON_BUTTON_BOTTOM_X ( ON_BUTTON_TOP_X + (2 * 8) ) +#define ON_BUTTON_BOTTOM_Y ( ON_BUTTON_TOP_Y + (2 * 8) ) +#define OFF_BUTTON_TOP_X ( 18 * 8 ) +#define OFF_BUTTON_TOP_Y ( 8 * 8 ) +#define OFF_BUTTON_BOTTOM_X ( OFF_BUTTON_TOP_X + (3 * 8) ) +#define OFF_BUTTON_BOTTOM_Y ( OFF_BUTTON_TOP_Y + (2 * 8) ) + +// UP/DOWNボタン領域 +#define UP_BUTTON_TOP_X ( 21 * 8 ) +#define UP_BUTTON_TOP_Y ( 7 * 8 ) +#define UP_BUTTON_BOTTOM_X ( UP_BUTTON_TOP_X + (2 * 8) ) +#define UP_BUTTON_BOTTOM_Y ( UP_BUTTON_TOP_Y + (2 * 8) ) +#define DOWN_BUTTON_TOP_X ( 21 * 8 ) +#define DOWN_BUTTON_TOP_Y ( 13 * 8 ) +#define DOWN_BUTTON_BOTTOM_X ( DOWN_BUTTON_TOP_X + (2 * 8) ) +#define DOWN_BUTTON_BOTTOM_Y ( DOWN_BUTTON_TOP_Y + (2 * 8) ) + + +// 項目の総数 +#define MS_FREESOFTBOX_NUMOF_ELEMENTS 1 + +// ソフトウェアキーボードのパラメータ +#define CHAR_LIST_CHAR_NUM 120 +#define CHAR_LIST_MODE_NUM 3 + +// 特殊キーコード +#define EOM_ (u16)0xe050 +#define CODE_BUTTON_TOP_ (u16)0xe051 +#define DEL_BUTTON_ (u16)0xe051 +#define SPACE_BUTTON_ (u16)0xe052 +#define VAR_BUTTON1_ (u16)0xe053 +#define VAR_BUTTON2_ (u16)0xe054 +#define OK_BUTTON_ (u16)0xe055 +#define CANCEL_BUTTON_ (u16)0xe056 +#define CODE_BUTTON_BOTTOM_ (u16)0xe057 + +#define CHAR_USCORE L'_' +#define KEY_PER_LINE 11 + +#define KEY_START 109 //ソフトウェアキーのカーソルデフォルト位置はキャンセルキー + +#define KEY_OK 0xffff +#define KEY_CANCEL 0xfffe +#define KEY_PREVPAGE 0xfffd +#define KEY_SUCCPAGE 0xfffc +#define KEY_ON 0xfffb +#define KEY_OFF 0xfffa +#define KEY_UP 0xfff9 +#define KEY_DOWN 0xfff8 +#define MULTI_KEY_UP 0xffe0 +#define MULTI_KEY_DOWN 0xffd0 +#define MASK_MULTI_KEY 0xfff0 + +// 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 void SetAvailableWirelessInit( void ); +static int SetAvailableWirelessMain( void ); + +// static variable------------------------------ +// 一時的にしか使わない物をstaticにしているので +// 少しでもダイエットしたい時はWork扱いにしてAlloc→Freeしましょう + +// メニューで使用 +static u16 sCursorMenu = 0; + +// 特定のモードでのみ使用 +static BOOL sbAvailableWireless = FALSE; + +// const data----------------------------------- + +// ++ メインメニュー + +static const u16 *s_pStrSetting[ MS_FREESOFTBOX_NUMOF_ELEMENTS ]; // メインメニュー用文字テーブルへのポインタリスト + +static const u16 *const s_pStrSettingElemTbl[ MS_FREESOFTBOX_NUMOF_ELEMENTS ][ LCFG_TWL_LANG_CODE_MAX ] = { + + { + (const u16 *)L"無線の使用", + (const u16 *)L"Available Wireless", + (const u16 *)L"Available Wireless(F)", + (const u16 *)L"Available Wireless(G)", + (const u16 *)L"Available Wireless(I)", + (const u16 *)L"Available Wireless(S)", + (const u16 *)L"Available Wireless(C)", + (const u16 *)L"Available Wireless(K)", + }, +}; + +// 表示位置 +static MenuPos s_settingPos[] = { + + { TRUE, 2 * 8, 6 * 8 }, +}; + +// 表示パラメータ +static const MenuParam s_settingParam = +{ + MS_FREESOFTBOX_NUMOF_ELEMENTS, + TXT_COLOR_BLACK, + TXT_COLOR_GREEN, + TXT_COLOR_RED, + &s_settingPos[0], + (const u16 **)&s_pStrSetting, +}; + + +//========================================================= +// +// ボタンのタッチ処理 +// +//========================================================= + +// キャンセルボタン専用SelectSomethingFuncの実装 +static BOOL SelectCancelFunc( u16 *csr, TPData *tgt ) +{ + BOOL ret; + ret = WithinRangeTP( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y, + CANCEL_BUTTON_BOTTOM_X, CANCEL_BUTTON_BOTTOM_Y, tgt ); + if(ret) *csr = KEY_CANCEL; + 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 SelectONFunc( u16 *csr, TPData *tgt ) +{ + BOOL ret; + ret = WithinRangeTP( ON_BUTTON_TOP_X, ON_BUTTON_TOP_Y, + ON_BUTTON_BOTTOM_X, ON_BUTTON_BOTTOM_Y, tgt ); + if(ret) *csr = KEY_ON; + return ret; +} +static BOOL SelectOFFFunc( u16 *csr, TPData *tgt ) +{ + BOOL ret; + ret = WithinRangeTP( OFF_BUTTON_TOP_X, OFF_BUTTON_TOP_Y, + OFF_BUTTON_BOTTOM_X, OFF_BUTTON_BOTTOM_Y, tgt ); + if(ret) *csr = KEY_OFF; + 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 DrawWirelessMenuScene( void ) +{ + BOOL bFlg; + + NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL ); + PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"WIRELESS" ); + PutStringUTF16( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16 *)L"ARETURN" ); + // メニュー項目 + DrawMenu( sCursorMenu, &s_settingParam ); + // ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + // あらかじめTWL設定データファイルから読み込み済みの設定を取得して表示 + // ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + // フリーソフトBOX数 + bFlg = LCFG_TSD_IsAvailableWireless(); + PutStringUTF16( 25*8, s_settingPos[0].y, TXT_UCOLOR_G0, + (bFlg)?(const u16*)L"ON":(const u16*)L"OFF" ); // 値が不正のとき赤色で表示 +} + +// 初期化 +void SetWirelessInit( void ) +{ + int i; + + // NITRO設定データのlanguageに応じたメインメニュー構成言語の切り替え + for( i=0; i < MS_FREESOFTBOX_NUMOF_ELEMENTS; i++ ) + { + s_pStrSetting[ i ] = s_pStrSettingElemTbl[ i ][ LCFG_TSD_GetLanguage() ]; + } + + // BGデータのロード処理 + GX_LoadBG1Char(bg_char_data, 0, sizeof(bg_char_data)); + GX_LoadBG1Scr(bg_scr_data, 0, sizeof(bg_scr_data)); + + DrawWirelessMenuScene(); + + SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 ); + + GX_SetVisiblePlane ( GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1); + GXS_SetVisiblePlane( GX_PLANEMASK_BG0 ); +} + +// メニューから呼ばれるメイン +int SetWirelessMain( void ) +{ + SelectSomethingFunc func[1]={SelectCancelFunc}; + BOOL tp_select; + BOOL tpCommit = FALSE; + u16 padrep; + static u16 commit; + + ReadTP(); + + padrep = DetectPadRepeat(); // 長押し検出 + + // メニューからの項目選択 + if( (pad.trg & PAD_KEY_DOWN) || (padrep & PAD_KEY_DOWN) ){ // カーソルの移動 + if( ++sCursorMenu >= MS_FREESOFTBOX_NUMOF_ELEMENTS ) { + sCursorMenu = 0; + } + } + if( (pad.trg & PAD_KEY_UP) || (padrep & PAD_KEY_UP) ){ + if( --sCursorMenu & 0x80 ) { + sCursorMenu = (u16)(MS_FREESOFTBOX_NUMOF_ELEMENTS - 1); + } + } + tp_select = SelectMenuByTP( &sCursorMenu, &s_settingParam ); + + // 特殊ボタンタッチ + tpCommit = SelectSomethingByTP( &commit, func, 1 ); + + // メニューへの分岐 + if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // メニュー項目への分岐 + if( (s_settingParam.pos[sCursorMenu]).enable ) { + switch( sCursorMenu ) + { + case 0: + SetAvailableWirelessInit(); + g_pNowProcess = SetAvailableWirelessMain; + break; + } + } // if( (s_settingParam.pos[sCursorMenu]).enable ) + } // if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) + else if( (pad.trg & PAD_BUTTON_B) || (tpCommit && (commit == KEY_CANCEL)) ) + { + MachineSettingInit(); + return 0; + } + + // 再描画 + DrawWirelessMenuScene(); + return 0; +} + +//========================================================= +// +// ワイアレス通信のON/OFF (ON/OFFスイッチ切り替え) +// +//========================================================= + +// 描画処理 +static void DrawSetAvailableWirelessScene( void ) +{ + NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL ); + PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"AVAILABLE WIRELESS" ); + + if( sbAvailableWireless ) + { + PutStringUTF16( ON_BUTTON_TOP_X, ON_BUTTON_TOP_Y, TXT_COLOR_GREEN, (const u16*)L"ON" ); + PutStringUTF16( OFF_BUTTON_TOP_X, OFF_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16*)L"OFF" ); + } + else + { + PutStringUTF16( ON_BUTTON_TOP_X, ON_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16*)L"ON" ); + PutStringUTF16( OFF_BUTTON_TOP_X, OFF_BUTTON_TOP_Y, TXT_COLOR_GREEN, (const u16*)L"OFF" ); + } + PutStringUTF16( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16 *)L"ACANCEL" ); + PutStringUTF16( OK_BUTTON_TOP_X, OK_BUTTON_TOP_Y, TXT_UCOLOR_G0, (const u16 *)L"@OK" ); +} + +// 初期化 +static void SetAvailableWirelessInit( void ) +{ + SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 ); + + // ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + // あらかじめTWL設定データファイルから読み込み済みの設定を取得 + // ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + sbAvailableWireless = LCFG_TSD_IsAvailableWireless(); + + DrawSetAvailableWirelessScene(); + + GX_SetVisiblePlane ( GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1); + GXS_SetVisiblePlane( GX_PLANEMASK_BG0 ); +} + +// 表示プロセスとして呼び出されるメイン +static int SetAvailableWirelessMain( void ) +{ + SelectSomethingFunc func[4]={SelectCancelFunc, SelectOKFunc, SelectONFunc, SelectOFFFunc }; + u16 commit; + BOOL tp_touch = FALSE; + + ReadTP(); + + // キーによる選択 + if( (pad.trg & PAD_KEY_LEFT) || (pad.trg & PAD_KEY_RIGHT) ) + { + sbAvailableWireless = !sbAvailableWireless; + } + + // タッチによる選択 + tp_touch = SelectSomethingByTP( &commit, func, 4 ); + if( tp_touch && (commit == KEY_ON) ) + { + sbAvailableWireless = TRUE; + } + else if( tp_touch && (commit == KEY_OFF) ) + { + sbAvailableWireless = FALSE; + } + + // 決定 + if( (pad.trg & PAD_BUTTON_A) || (tp_touch && (commit == KEY_OK)) ) + { + LCFG_TSD_SetFlagAvailableWireless( sbAvailableWireless ); + // :::::::::::::::::::::::::::::::::::::::::::::: + // TWL設定データファイルへの書き込み + // :::::::::::::::::::::::::::::::::::::::::::::: + if( !MY_WriteTWLSettings() ) + { + OS_TPrintf( "TWL settings write failed.\n" ); + } + SetWirelessInit(); + g_pNowProcess = SetWirelessMain; + return 0; + } + else if( (pad.trg & PAD_BUTTON_B) || (tp_touch && (commit == KEY_CANCEL)) ) + { + SetWirelessInit(); // キャンセルのときセットしない + g_pNowProcess = SetWirelessMain; + return 0; + } + + DrawSetAvailableWirelessScene(); + return 0; +} +