diff --git a/build/systemMenu_tools/NandInitializerProduction/ARM9.TWL/Makefile b/build/systemMenu_tools/NandInitializerProduction/ARM9.TWL/Makefile index 0e45ca7a..a32c4f4e 100644 --- a/build/systemMenu_tools/NandInitializerProduction/ARM9.TWL/Makefile +++ b/build/systemMenu_tools/NandInitializerProduction/ARM9.TWL/Makefile @@ -31,7 +31,7 @@ MACRO_FLAGS += -DUSE_WIRELESS_FORCE_DISABLE_SETTING #============================================================================ #============================================================================ # フォントデータを書き込み可能にする場合定義します。(要:Make Clean) -#MACRO_FLAGS += -DUSE_WRITE_FONT_DATA +MACRO_FLAGS += -DUSE_WRITE_FONT_DATA #============================================================================ #============================================================================ # マリクラデバッグ用に製品本体での起動を抑制する場合定義します。(要:Make Clean) diff --git a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/include/process_auto.h b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/include/process_auto.h index 7fd61269..65257c5f 100644 --- a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/include/process_auto.h +++ b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/include/process_auto.h @@ -30,14 +30,32 @@ extern "C" { 型定義 *---------------------------------------------------------------------------*/ -//typedef void* (*TpProcess)(void); +enum { + AUTO_PROCESS_MENU_FORMAT = 0, + AUTO_PROCESS_MENU_HARDWARE_INFO, +#ifdef USE_WRITE_FONT_DATA + AUTO_PROCESS_MENU_FONT_DATA, +#endif // USE_WRITE_FONT_DATA + AUTO_PROCESS_MENU_IMPORT_TAD, + AUTO_PROCESS_MENU_IMPORT_NANDFIRM, + AUTO_PROCESS_MENU_MCU, + AUTO_PROCESS_MENU_NUM +}; + +typedef enum _AutoProcessResult +{ + AUTO_PROCESS_RESULT_SUCCESS, + AUTO_PROCESS_RESULT_FAILURE, + AUTO_PROCESS_RESULT_SKIP +} +AutoProcessResult; /*---------------------------------------------------------------------------* グローバル変数定義 *---------------------------------------------------------------------------*/ extern BOOL gAutoFlag; - +extern AutoProcessResult gAutoProcessResult[AUTO_PROCESS_MENU_NUM]; /*---------------------------------------------------------------------------* 関数定義 diff --git a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/include/process_mcu.h b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/include/process_mcu.h index a9056481..f68c6dfb 100644 --- a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/include/process_mcu.h +++ b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/include/process_mcu.h @@ -29,7 +29,6 @@ extern "C" { /*---------------------------------------------------------------------------* 定数定義 *---------------------------------------------------------------------------*/ -#define MCU_DATA_FILE_PATH_IN_ROM "rom:/data/mcu_twl.hex" /*---------------------------------------------------------------------------* 関数定義 diff --git a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_auto.c b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_auto.c index 110e3bd8..df042872 100644 --- a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_auto.c +++ b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_auto.c @@ -26,6 +26,7 @@ #include "process_norfirm.h" #include "process_auto.h" #include "process_fade.h" +#include "process_mcu.h" #include "cursor.h" #include "keypad.h" @@ -33,19 +34,6 @@ 型定義 *---------------------------------------------------------------------------*/ -enum { - MENU_FORMAT = 0, - MENU_HARDWARE_INFO, -#ifdef USE_WRITE_FONT_DATA - MENU_FONT_DATA, -#endif // USE_WRITE_FONT_DATA - MENU_IMPORT_TAD, -#ifndef MARIOCLUB_VERSION - MENU_IMPORT_NANDFIRM, -#endif // MARIOCLUB_VERSION - MENU_END -}; - /*---------------------------------------------------------------------------* 定数定義 *---------------------------------------------------------------------------*/ @@ -55,6 +43,7 @@ enum { *---------------------------------------------------------------------------*/ BOOL gAutoFlag = FALSE; +AutoProcessResult gAutoProcessResult[AUTO_PROCESS_MENU_NUM]; /*---------------------------------------------------------------------------* 内部変数定義 @@ -82,9 +71,17 @@ static s8 sMenuSelectNo; void* AutoProcess0(void) { + s32 i; + // オートフラグセット gAutoFlag = TRUE; + // 処理結果初期化 + for (i=0;i #include #include @@ -188,8 +190,16 @@ void* fontProcess2(void) // Auto用 if (gAutoFlag) { - if (result) { FADE_OUT_RETURN( AutoProcess1 ); } - else { FADE_OUT_RETURN( AutoProcess2); } + if (result) + { + gAutoProcessResult[AUTO_PROCESS_MENU_FONT_DATA] = AUTO_PROCESS_RESULT_SUCCESS; + FADE_OUT_RETURN( AutoProcess1 ); + } + else + { + gAutoProcessResult[AUTO_PROCESS_MENU_FONT_DATA] = AUTO_PROCESS_RESULT_FAILURE; + FADE_OUT_RETURN( AutoProcess2); + } } #endif @@ -270,3 +280,4 @@ static BOOL WriteFontData(void) return result; } +#endif // USE_WRITE_FONT_DATA diff --git a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_format.c b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_format.c index 80042764..d84c304a 100644 --- a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_format.c +++ b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_format.c @@ -355,8 +355,16 @@ void* FormatProcess3(void) // Auto用 if (gAutoFlag) { - if (sFormatResult) { FADE_OUT_RETURN( AutoProcess1 ); } - else { FADE_OUT_RETURN( AutoProcess2 ); } + if (sFormatResult) + { + gAutoProcessResult[AUTO_PROCESS_MENU_FORMAT] = AUTO_PROCESS_RESULT_SUCCESS; + FADE_OUT_RETURN( AutoProcess1 ); + } + else + { + gAutoProcessResult[AUTO_PROCESS_MENU_FORMAT] = AUTO_PROCESS_RESULT_FAILURE; + FADE_OUT_RETURN( AutoProcess2 ); + } } #endif diff --git a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_hw_info.c b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_hw_info.c index e3a2c412..34df8db4 100644 --- a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_hw_info.c +++ b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_hw_info.c @@ -260,8 +260,16 @@ void* HWInfoProcess2(void) // Auto用 if (gAutoFlag) { - if (result) { FADE_OUT_RETURN( AutoProcess1 ); } - else { FADE_OUT_RETURN( AutoProcess2 ); } + if (result) + { + gAutoProcessResult[AUTO_PROCESS_MENU_HARDWARE_INFO] = AUTO_PROCESS_RESULT_SUCCESS; + FADE_OUT_RETURN( AutoProcess1 ); + } + else + { + gAutoProcessResult[AUTO_PROCESS_MENU_HARDWARE_INFO] = AUTO_PROCESS_RESULT_FAILURE; + FADE_OUT_RETURN( AutoProcess2 ); + } } #endif diff --git a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_import.c b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_import.c index 02439b0e..a266ea4a 100644 --- a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_import.c +++ b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_import.c @@ -370,8 +370,16 @@ static void* ImportAllOverwriteProcess0(void) // Auto用 if (gAutoFlag) { - if (result && sFileNum > 0) { FADE_OUT_RETURN( AutoProcess1 ); } - else { FADE_OUT_RETURN( AutoProcess2 ); } + if (result && sFileNum > 0) + { + gAutoProcessResult[AUTO_PROCESS_MENU_IMPORT_TAD] = AUTO_PROCESS_RESULT_SUCCESS; + FADE_OUT_RETURN( AutoProcess1 ); + } + else + { + gAutoProcessResult[AUTO_PROCESS_MENU_IMPORT_TAD] = AUTO_PROCESS_RESULT_FAILURE; + FADE_OUT_RETURN( AutoProcess2 ); + } } return ImportProcess1; diff --git a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_mcu.c b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_mcu.c index ecca41a9..5dd5a3d8 100644 --- a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_mcu.c +++ b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_mcu.c @@ -28,33 +28,39 @@ #include "cursor.h" #include "keypad.h" +extern void MakeFullPathForSD(char* file_name, char* full_path); + /*---------------------------------------------------------------------------* - 型定義 + マクロ定義 *---------------------------------------------------------------------------*/ +#define ROUND_UP(value, alignment) \ + (((u32)(value) + (alignment-1)) & ~(alignment-1)) + /*---------------------------------------------------------------------------* 定数定義 *---------------------------------------------------------------------------*/ -#define NUM_OF_MENU_SELECT 2 -#define DOT_OF_MENU_SPACE 16 -#define CURSOR_ORIGIN_X 32 -#define CURSOR_ORIGIN_Y 56 +#define DOT_OF_MENU_SPACE 8 +#define CHAR_OF_MENU_SPACE 1 +#define CURSOR_ORIGIN_X 32 +#define CURSOR_ORIGIN_Y 40 -#define ROUND_UP(value, alignment) \ - (((u32)(value) + (alignment-1)) & ~(alignment-1)) +#define FILE_NUM_MAX 16 /*---------------------------------------------------------------------------* 内部変数定義 *---------------------------------------------------------------------------*/ static s8 sMenuSelectNo; +static char sFilePath[FILE_NUM_MAX][FS_ENTRY_LONGNAME_MAX]; +static u8 sFileNum; /*---------------------------------------------------------------------------* 内部関数宣言 *---------------------------------------------------------------------------*/ -static BOOL WriteMcuData(void); +static BOOL WriteMcuData(char* full_path); /*---------------------------------------------------------------------------* プロセス関数定義 @@ -72,6 +78,7 @@ static BOOL WriteMcuData(void); void* mcuProcess0(void) { + FSFile dir; int i; // 文字列全クリア @@ -81,12 +88,11 @@ void* mcuProcess0(void) kamiFontPrintf(2, 1, FONT_COLOR_BLACK, "Write MCU Data"); kamiFontPrintf(0, 2, FONT_COLOR_BLACK, "--------------------------------"); - // メニュー一覧 - kamiFontPrintf(3, 6, FONT_COLOR_BLACK, "+-------------------+-----+"); - kamiFontPrintf(3, 7, FONT_COLOR_BLACK, "l WRITE MCU DATA l l"); - kamiFontPrintf(3, 8, FONT_COLOR_BLACK, "+-------------------+-----+"); - kamiFontPrintf(3, 9, FONT_COLOR_BLACK, "l RETURN l l"); - kamiFontPrintf(3, 10, FONT_COLOR_BLACK, "+-------------------+-----+"); + // 配列クリア + MI_CpuClear8( sFilePath, sizeof(sFilePath) ); + + // ファイル数初期化 + sFileNum = 0; // 背景全クリア for (i=0;i<24;i++) @@ -99,6 +105,69 @@ void* mcuProcess0(void) kamiFontFillChar( 1, BG_COLOR_GRAY, BG_COLOR_GRAY ); kamiFontFillChar( 2, BG_COLOR_GRAY, BG_COLOR_TRANS ); + // SDカードのルートディレクトリを検索 + if ( !FS_OpenDirectory(&dir, "sdmc:/", FS_FILEMODE_R | FS_FILEMODE_W) ) + { + OS_Printf("Error FS_OpenDirectory(sdmc:/)\n"); + kamiFontPrintf(3, 13, FONT_COLOR_BLACK, "Error FS_OpenDirectory(sdmc:/)"); + } + else + { + FSDirectoryEntryInfo info[1]; + OS_Printf("[%s]:\n", "sdmc:/"); + + kamiFontPrintfConsole(CONSOLE_ORANGE, "------ hex file list -----\n"); + + // .hex を探してファイル名を保存しておく + while (FS_ReadDirectory(&dir, info)) + { + OS_Printf(" %s", info->longname); + if ((info->attributes & (FS_ATTRIBUTE_DOS_DIRECTORY | FS_ATTRIBUTE_IS_DIRECTORY)) != 0) + { + OS_Printf("/\n"); + } + else + { + char* pExtension; + OS_Printf(" (%d BYTEs)\n", info->filesize); + + // 拡張子のチェック + pExtension = STD_SearchCharReverse( info->longname, '.'); + if (pExtension) + { + if (!STD_CompareString( pExtension, ".hex") || !STD_CompareString( pExtension, ".HEX")) + { + STD_CopyString( sFilePath[sFileNum], info->longname ); + kamiFontPrintfConsole(CONSOLE_ORANGE, "%d:%s\n", sFileNum, info->longname); + + // 最大16個で終了 + if (++sFileNum >= FILE_NUM_MAX) + { + break; + } + } + } + } + } + (void)FS_CloseDirectory(&dir); + + kamiFontPrintfConsole(CONSOLE_ORANGE, "--------------------------\n"); + } + + // メニュー一覧 + kamiFontPrintf((s16)3, (s16)4, FONT_COLOR_BLACK, "+--------------------+----+"); + kamiFontPrintf((s16)3, (s16)(5+sFileNum+1), FONT_COLOR_BLACK, "+--------------------+----+"); + + // tad ファイルリストを表示 + for (i=0;i= NUM_OF_MENU_SELECT) sMenuSelectNo = 0; + if (++sMenuSelectNo > sFileNum) sMenuSelectNo = 0; } // カーソル配置 @@ -168,33 +235,50 @@ void* mcuProcess1(void) void* mcuProcess2(void) { BOOL result; + char full_path[FS_ENTRY_LONGNAME_MAX+6]; - switch( sMenuSelectNo ) + if (STD_GetStringLength(sFilePath[sMenuSelectNo])) { - case 0: - result = WriteMcuData(); - if (result) - { - kamiFontPrintf(25, 7, FONT_COLOR_GREEN, "OK"); - } - else - { - kamiFontPrintf(25, 7, FONT_COLOR_RED, "NG"); - } - break; - case 1: - FADE_OUT_RETURN( TopmenuProcess0 ); + kamiFontPrintf((s16)26, (s16)(5+sMenuSelectNo*CHAR_OF_MENU_SPACE), FONT_COLOR_BLACK, "WAIT"); + kamiFontLoadScreenData(); + + // .hexのフルパスを作成 + MakeFullPathForSD(sFilePath[sMenuSelectNo], full_path); + result = WriteMcuData(full_path); } -/* + else + { + if (gAutoFlag) { FADE_OUT_RETURN( AutoProcess2 ); } + else { FADE_OUT_RETURN( TopmenuProcess0 ); } + } + + // 今回の結果を表示 + if ( result == TRUE ) + { + kamiFontPrintf((s16)26, (s16)(5+sMenuSelectNo*CHAR_OF_MENU_SPACE), FONT_COLOR_GREEN, "OK"); + } + else + { + kamiFontPrintf((s16)26, (s16)(5+sMenuSelectNo*CHAR_OF_MENU_SPACE), FONT_COLOR_RED, "NG"); + } + #ifndef NAND_INITIALIZER_LIMITED_MODE // Auto用 if (gAutoFlag) { - if (result) { FADE_OUT_RETURN( AutoProcess1 ); } - else { FADE_OUT_RETURN( AutoProcess2); } + if (result) + { + gAutoProcessResult[AUTO_PROCESS_MENU_MCU] = AUTO_PROCESS_RESULT_SUCCESS; + FADE_OUT_RETURN( AutoProcess1 ); + } + else + { + gAutoProcessResult[AUTO_PROCESS_MENU_MCU] = AUTO_PROCESS_RESULT_FAILURE; + FADE_OUT_RETURN( AutoProcess2); + } } #endif -*/ + return mcuProcess1; } @@ -202,7 +286,7 @@ void* mcuProcess2(void) 処理関数定義 *---------------------------------------------------------------------------*/ -static BOOL WriteMcuData(void) +static BOOL WriteMcuData(char* full_path) { FSFile file; BOOL open_is_ok; @@ -214,10 +298,10 @@ static BOOL WriteMcuData(void) // ROMファイルオープン FS_InitFile(&file); - open_is_ok = FS_OpenFile(&file, MCU_DATA_FILE_PATH_IN_ROM); + open_is_ok = FS_OpenFile(&file, full_path); if (!open_is_ok) { - OS_Printf("FS_OpenFile(\"%s\") ... ERROR!\n", MCU_DATA_FILE_PATH_IN_ROM); + OS_Printf("FS_OpenFile(\"%s\") ... ERROR!\n", full_path); return FALSE; } @@ -230,7 +314,7 @@ static BOOL WriteMcuData(void) read_is_ok = FS_ReadFile( &file, pTempBuf, (s32)file_size ); if (!read_is_ok) { - kamiFontPrintfConsoleEx(CONSOLE_RED, "FS_ReadFile(\"%s\") ... ERROR!\n", MCU_DATA_FILE_PATH_IN_ROM); + kamiFontPrintfConsoleEx(CONSOLE_RED, "FS_ReadFile(\"%s\") ... ERROR!\n", full_path); FS_CloseFile(&file); OS_Free(pTempBuf); return FALSE; diff --git a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_nandfirm.c b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_nandfirm.c index 841fda96..60ab5ef8 100644 --- a/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_nandfirm.c +++ b/build/systemMenu_tools/NandInitializerRed/ARM9.TWL/src/process_nandfirm.c @@ -39,9 +39,6 @@ マクロ定義 *---------------------------------------------------------------------------*/ -// NANDファーム書き込みの際にNVRAMの未割り当て領域+予約領域を0クリアする場合は定義します(開発用) -//#define CLEAR_NON_ASIGNED_AREA_AND_RESERVED_AREA_ALL - #define ROUND_UP(value, alignment) \ (((u32)(value) + (alignment-1)) & ~(alignment-1)) @@ -56,16 +53,6 @@ #define FILE_NUM_MAX 16 -#define NAND_BLOCK_BYTE 0x200 -#define NAND_FIRM_START_OFFSET 0x200 - -#define NVRAM_PAGE_SIZE 0x100 -#define NVRAM_NORFIRM_RESERVED_ADDRESS 0x200 -#define NVRAM_NORFIRM_NANDBOOT_FLAG_OFFSET 0xff -#define NVRAM_NORFIRM_NANDBOOT_FLAG 0x80 - -#define NVRAM_NON_ASIGNED_AREA_ADDRESS 0x300 - /*---------------------------------------------------------------------------* 内部変数定義 *---------------------------------------------------------------------------*/ @@ -73,14 +60,12 @@ static s32 sMenuSelectNo; static char sFilePath[FILE_NUM_MAX][FS_ENTRY_LONGNAME_MAX]; static u8 sFileNum; -static u8 sNvramPageSizeBuffer[NVRAM_PAGE_SIZE] ATTRIBUTE_ALIGN(32); // ARM7からアクセスするためスタックでは駄目 -static u32 sReservedAreaEndAddress; /*---------------------------------------------------------------------------* - 内部関数宣言 + 関数宣言 *---------------------------------------------------------------------------*/ -static void MakeFullPathForSD(char* file_name, char* full_path); +void MakeFullPathForSD(char* file_name, char* full_path); /*---------------------------------------------------------------------------* プロセス関数定義 @@ -280,8 +265,16 @@ void* NandfirmProcess2(void) // Auto用 if (gAutoFlag) { - if (ret) { FADE_OUT_RETURN( AutoProcess1 ); } - else { FADE_OUT_RETURN( AutoProcess2 ); } + if (ret) + { + gAutoProcessResult[AUTO_PROCESS_MENU_IMPORT_NANDFIRM] = AUTO_PROCESS_RESULT_SUCCESS; + FADE_OUT_RETURN( AutoProcess1 ); + } + else + { + gAutoProcessResult[AUTO_PROCESS_MENU_IMPORT_NANDFIRM] = AUTO_PROCESS_RESULT_FAILURE; + FADE_OUT_RETURN( AutoProcess2 ); + } } return NandfirmProcess1; @@ -300,7 +293,7 @@ void* NandfirmProcess2(void) Returns: None. *---------------------------------------------------------------------------*/ -static void MakeFullPathForSD(char* file_name, char* full_path) +void MakeFullPathForSD(char* file_name, char* full_path) { // フルパスを作成 STD_CopyString( full_path, "sdmc:/" );