正式なフォーマット後にTWLCFG*.datを生成していなかった不具合を修正(これまでは再起動後にリカバリ生成されていました)

namut : エラー出力を改善

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1019 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
kamikawa 2008-03-31 12:16:18 +00:00
parent e7279e61d2
commit b20cab0606
7 changed files with 102 additions and 37 deletions

View File

@ -122,22 +122,38 @@ BOOL NAMUT_Format(void)
BOOL ret = TRUE; BOOL ret = TRUE;
// プロテクトされていないタイトルの削除を行います // プロテクトされていないタイトルの削除を行います
ret &= NAMUTi_DeleteNonprotectedTitle(); if (!NAMUTi_DeleteNonprotectedTitle())
{
ret = FALSE;
OS_TWarning("Fail! NAMUTi_DeleteNonprotectedTitle()\n");
}
// プロテクトタイトルのセーブデータをフォーマットします // プロテクトタイトルのセーブデータをフォーマットします
ret &= NAMUTi_ClearSavedataAll(TRUE); if (!NAMUTi_ClearSavedataAll(TRUE))
{
ret = FALSE;
OS_TWarning("Fail! NAMUTi_ClearSavedataAll()\n");
}
// 指定ファイルを0xffでクリアします // 指定ファイルを0xffでクリアします
for (i=0; i<sizeof(sFillFileList)/sizeof(sFillFileList[0]); i++) for (i=0; i<sizeof(sFillFileList)/sizeof(sFillFileList[0]); i++)
{ {
ret &= NAMUTi_FillFile(sFillFileList[i]); if (!NAMUTi_FillFile(sFillFileList[i]))
{
ret = FALSE;
OS_TWarning("Fail! NAMUTi_FillFile(%s)\n", sFillFileList[i]);
}
} }
// temp以下を消去します // temp以下を消去します
// NAM関数でtempが作成&使用される可能性があるため最後に実行します // NAM関数でtempが作成&使用される可能性があるため最後に実行します
for (i=0; i<sizeof(sDeleteDirectoryList)/sizeof(char*); i++) for (i=0; i<sizeof(sDeleteDirectoryList)/sizeof(char*); i++)
{ {
ret &= NAMUTi_DeleteNandDirectory(sDeleteDirectoryList[i]); if (!NAMUTi_DeleteNandDirectory(sDeleteDirectoryList[i]))
{
ret = FALSE;
OS_TWarning("NAMUTi_DeleteNandDirectory(%s)\n", sDeleteDirectoryList[i]);
}
} }
return ret; return ret;
@ -164,7 +180,7 @@ static BOOL NAMUTi_DeleteNandDirectory(const char *path)
// 引数で指定されたディレクトリを開く // 引数で指定されたディレクトリを開く
if (!FS_OpenDirectory(&dir, path, FS_FILEMODE_R)) if (!FS_OpenDirectory(&dir, path, FS_FILEMODE_R))
{ {
SDK_ASSERTMSG(0, "Fail! FS_OpenDirectory(%s) in %s\n", path, __func__); OS_TWarning("Fail! FS_OpenDirectory(%s) in %s\n", path, __func__);
return FALSE; return FALSE;
} }
@ -184,14 +200,20 @@ static BOOL NAMUTi_DeleteNandDirectory(const char *path)
// ディレクトリ // ディレクトリ
if (entryInfo.attributes & FS_ATTRIBUTE_IS_DIRECTORY) if (entryInfo.attributes & FS_ATTRIBUTE_IS_DIRECTORY)
{ {
ret &= FS_DeleteDirectoryAuto(sCurrentFullPath); if (!FS_DeleteDirectoryAuto(sCurrentFullPath))
SDK_ASSERTMSG(ret, "Fail! FS_DeleteDirectoryAuto(%s) in %s\n", sCurrentFullPath, __func__); {
ret = FALSE;
OS_TWarning("Fail! FS_DeleteDirectoryAuto(%s) in %s\n", sCurrentFullPath, __func__);
}
} }
// ファイル // ファイル
else else
{ {
ret &= FS_DeleteFileAuto(sCurrentFullPath); if (!FS_DeleteFileAuto(sCurrentFullPath))
SDK_ASSERTMSG(ret, "Fail! FS_DeleteFileAuto(%s) in %s\n", sCurrentFullPath, __func__); {
ret = FALSE;
OS_TWarning("Fail! FS_DeleteFileAuto(%s) in %s\n", sCurrentFullPath, __func__);
}
} }
} }
@ -243,7 +265,7 @@ static BOOL NAMUTi_DeleteNonprotectedTitleEntity(const char* path)
// 引数で指定されたディレクトリを開く // 引数で指定されたディレクトリを開く
if (!FS_OpenDirectory(&dir, path, FS_FILEMODE_R)) if (!FS_OpenDirectory(&dir, path, FS_FILEMODE_R))
{ {
SDK_ASSERTMSG(0, "Fail! FS_OpenDirectory(%s) in %s\n", path, __func__); OS_TWarning("Fail! FS_OpenDirectory(%s) in %s\n", path, __func__);
return FALSE; return FALSE;
} }
@ -268,15 +290,21 @@ static BOOL NAMUTi_DeleteNonprotectedTitleEntity(const char* path)
STD_ConcatenateLString(sCurrentFullPath, "/", FS_ENTRY_LONGNAME_MAX); STD_ConcatenateLString(sCurrentFullPath, "/", FS_ENTRY_LONGNAME_MAX);
STD_ConcatenateLString(sCurrentFullPath, entryInfo.longname, FS_ENTRY_LONGNAME_MAX); STD_ConcatenateLString(sCurrentFullPath, entryInfo.longname, FS_ENTRY_LONGNAME_MAX);
ret &= FS_DeleteDirectoryAuto(sCurrentFullPath); if (!FS_DeleteDirectoryAuto(sCurrentFullPath))
SDK_ASSERTMSG(ret, "Fail! FS_DeleteDirectoryAuto(%s) in %s\n", sCurrentFullPath, __func__); {
ret = FALSE;
OS_TWarning("Fail! FS_DeleteDirectoryAuto(%s) in %s\n", sCurrentFullPath, __func__);
}
} }
} }
} }
// ディレクトリを閉じる // ディレクトリを閉じる
ret &= FS_CloseDirectory(&dir); if (!FS_CloseDirectory(&dir))
SDK_ASSERTMSG(ret, "Fail! FS_CloseDirectory() in %s\n", __func__); {
ret = FALSE;
OS_TWarning("Fail! FS_CloseDirectory() in %s\n", __func__);
}
return ret; return ret;
} }
@ -446,6 +474,7 @@ static BOOL NAMUTi_FillFile(const char* path)
} }
else else
{ {
OS_TWarning("Fail! FS_OpenFileEx(%s)\n", path);
return FALSE; return FALSE;
} }
return TRUE; return TRUE;
@ -470,7 +499,7 @@ u32 NAMUT_SearchInstalledSoftBoxCount( void )
// タイトルリスト取得 // タイトルリスト取得
if (NAM_GetTitleList(sTitleIdArray, TITLE_LIST_MAX) != NAM_OK) if (NAM_GetTitleList(sTitleIdArray, TITLE_LIST_MAX) != NAM_OK)
{ {
SDK_ASSERTMSG(0, "Fail! NAM_GetTitleList() in %s\n", __func__); OS_TWarning("Fail! NAM_GetTitleList() in %s\n", __func__);
return 0; return 0;
} }

View File

@ -242,17 +242,22 @@ static BOOL VerifyData( const u8 *pTgt, const u8 *pOrg, u32 len )
Arguments: Arguments:
Returns: None. Returns: BOOL
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
void HWI_ModifyLanguage( u8 region ) BOOL HWI_ModifyLanguage( u8 region )
{ {
#pragma unused( region ) #pragma unused( region )
u32 langBitmap = LCFG_THW_GetValidLanguageBitmap(); u32 langBitmap = LCFG_THW_GetValidLanguageBitmap();
u8 nowLanguage = LCFG_TSD_GetLanguage(); u8 nowLanguage = LCFG_TSD_GetLanguage();
BOOL result = TRUE;
// TSDが存在しない場合はここでリカバリ生成
ReadTWLSettings();
// TSDが読み込めていないなら、何もせずリターン // TSDが読み込めていないなら、何もせずリターン
if( !s_isReadTSD ) { if( !s_isReadTSD ) {
return; OS_TPrintf("TWLSetting is not Readed!\n");
return FALSE;
} }
if( langBitmap & ( 0x0001 << nowLanguage ) ) { if( langBitmap & ( 0x0001 << nowLanguage ) ) {
@ -279,10 +284,16 @@ void HWI_ModifyLanguage( u8 region )
{ {
u8 *pBuffer = spAlloc( LCFG_WRITE_TEMP ); u8 *pBuffer = spAlloc( LCFG_WRITE_TEMP );
if( pBuffer ) { if( pBuffer ) {
(void)LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer ); if (!LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer ))
{
result = FALSE;
OS_TPrintf("Fail! LCFG_WriteTWLSettings()\n");
}
spFree( pBuffer ); spFree( pBuffer );
} }
} }
return result;
} }
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*

View File

@ -37,7 +37,7 @@ typedef enum
HwiInitResult; HwiInitResult;
HwiInitResult HWI_Init( void *(*pAlloc)( u32 ), void (*pFree)( void * ) ); HwiInitResult HWI_Init( void *(*pAlloc)( u32 ), void (*pFree)( void * ) );
void HWI_ModifyLanguage( u8 region ); BOOL HWI_ModifyLanguage( u8 region );
BOOL HWI_WriteHWNormalInfoFile( void ); BOOL HWI_WriteHWNormalInfoFile( void );
BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWireless ); BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo, BOOL isDisableWireless );
BOOL HWI_WriteHWIDSignFile( void ); BOOL HWI_WriteHWIDSignFile( void );

View File

@ -61,11 +61,11 @@ typedef struct FileProperty {
// FATFSのクラスタサイズは16KBなので、データサイズが決まっていないものは、余裕を持たせて16KBにしておく // FATFSのクラスタサイズは16KBなので、データサイズが決まっていないものは、余裕を持たせて16KBにしておく
//static const FileProperty s_fileList[] = { //static const FileProperty s_fileList[] = {
// { 128, "nand:/sys/ID.sgn" }, // 現状、全部サイズは適当。中身も空。 // { RSA_KEY_LENGTH, LCFG_TWL_HWID_SIGN_PATH }, // 現状、全部サイズは適当。中身も空。
// { LCFG_TWL_HWINFO_FILE_LENGTH, LCFG_TWL_HWINFO_NORMAL_PATH }, // { LCFG_TWL_HWINFO_FILE_LENGTH, LCFG_TWL_HWINFO_NORMAL_PATH },
// { LCFG_TWL_HWINFO_FILE_LENGTH, LCFG_TWL_HWINFO_SECURE_PATH }, // { LCFG_TWL_HWINFO_FILE_LENGTH, LCFG_TWL_HWINFO_SECURE_PATH },
// { FATFS_CLUSTER_SIZE, "nand:/shared1/TWLCFG0.dat" }, // { LCFG_TWL_HWINFO_FILE_LENGTH, "nand:/shared1/TWLCFG0.dat" },
// { FATFS_CLUSTER_SIZE, "nand:/shared1/TWLCFG1.dat" }, // ミラー // { LCFG_TWL_HWINFO_FILE_LENGTH, "nand:/shared1/TWLCFG1.dat" }, // ミラー
// { 0, NULL }, // { 0, NULL },
//}; //};
@ -305,7 +305,7 @@ static BOOL CreateFile( const FileProperty *pFileList )
} }
pTemp++; pTemp++;
} }
pBuffer = OS_Alloc( length ); pBuffer = OS_AllocFromSubPrivWram( length );
if( pBuffer == NULL ) { if( pBuffer == NULL ) {
OS_TPrintf( "memory allocate error.\n" ); OS_TPrintf( "memory allocate error.\n" );
ERROR_RETURN(); ERROR_RETURN();
@ -346,7 +346,7 @@ static BOOL CreateFile( const FileProperty *pFileList )
pFileList++; pFileList++;
} }
// メモリ解放 // メモリ解放
OS_Free( pBuffer ); OS_FreeToSubPrivWram( pBuffer );
return TRUE; return TRUE;
} }
@ -378,7 +378,7 @@ static BOOL CheckFile( const FileProperty *pFileList )
ERROR_RETURN(); ERROR_RETURN();
} }
// バッファ メモリ確保 // バッファ メモリ確保
pBuffer = OS_Alloc( pFileList->length ); pBuffer = OS_AllocFromSubPrivWram( pFileList->length );
if( pBuffer == NULL ) { if( pBuffer == NULL ) {
OS_TPrintf( "memory allocate error.\n" ); OS_TPrintf( "memory allocate error.\n" );
ERROR_RETURN(); ERROR_RETURN();
@ -406,7 +406,7 @@ static BOOL CheckFile( const FileProperty *pFileList )
} }
OS_TPrintf( " [VerifyTime : %dms] ", OS_TicksToMilliSeconds( OS_GetTick() - start ) ); OS_TPrintf( " [VerifyTime : %dms] ", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
// メモリ解放 // メモリ解放
OS_Free( pBuffer ); OS_FreeToSubPrivWram( pBuffer );
// ファイルクローズ // ファイルクローズ
(void)FATFS_CloseFile( file ); (void)FATFS_CloseFile( file );
OS_TPrintf( "ok.\n" ); OS_TPrintf( "ok.\n" );

View File

@ -42,6 +42,17 @@ void* HWInfoProcess2(void);
void* HWInfoProcess3(void); void* HWInfoProcess3(void);
void* HWInfoProcess4(void); void* HWInfoProcess4(void);
/*---------------------------------------------------------------------------*
Name: HW情報全体のライト
Description:
Arguments: region :
Returns: None.
*---------------------------------------------------------------------------*/
BOOL WriteHWInfoFile( u8 region );
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: UpdateNandBoxCount Name: UpdateNandBoxCount

View File

@ -19,6 +19,7 @@
#include <nitro/snd.h> #include <nitro/snd.h>
#include <twl/fatfs.h> #include <twl/fatfs.h>
#include <nitro/card.h> #include <nitro/card.h>
#include <twl/lcfg.h>
#include "kami_font.h" #include "kami_font.h"
#include "kami_pxi.h" #include "kami_pxi.h"
#include "process_topmenu.h" #include "process_topmenu.h"
@ -209,13 +210,22 @@ void* FormatProcess2(void)
kamiFontPrintf(24, y_pos, FONT_COLOR_BLACK, " WAIT"); kamiFontPrintf(24, y_pos, FONT_COLOR_BLACK, " WAIT");
kamiFontLoadScreenData(); kamiFontLoadScreenData();
if (NAMUT_Format())
{ {
kamiFontPrintf(24, y_pos, FONT_COLOR_GREEN, " OK "); // 現在のリージョンを保存しておきフォーマット後に保存リージョンで初期化する
} u8 region = LCFG_THW_GetRegion();
else BOOL result = TRUE;
{
kamiFontPrintf(24, y_pos, FONT_COLOR_RED, " NG "); result &= NAMUT_Format();
result &= WriteHWInfoFile(region);
if (result)
{
kamiFontPrintf(24, y_pos, FONT_COLOR_GREEN, " OK ");
}
else
{
kamiFontPrintf(24, y_pos, FONT_COLOR_RED, " NG ");
}
} }
#ifdef DUMP_NAND_TREE #ifdef DUMP_NAND_TREE
OS_Printf("\n"); OS_Printf("\n");

View File

@ -63,7 +63,6 @@ static BOOL s_isReadTSD;
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
static BOOL WriteHWInfoFile( u8 region );
static BOOL WriteHWNormalInfoFile( void ); static BOOL WriteHWNormalInfoFile( void );
static BOOL WriteHWSecureInfoFile( u8 region ); static BOOL WriteHWSecureInfoFile( u8 region );
//static BOOL DeleteHWInfoFile( void ); //static BOOL DeleteHWInfoFile( void );
@ -252,12 +251,12 @@ void* HWInfoProcess2(void)
Description: Description:
Arguments: None. Arguments: region :
Returns: None. Returns: None.
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
static BOOL WriteHWInfoFile( u8 region ) BOOL WriteHWInfoFile( u8 region )
{ {
static const char *pMsgNormalWriting = "Writing Normal File..."; static const char *pMsgNormalWriting = "Writing Normal File...";
static const char *pMsgSecureWriting = "Writing Secure File..."; static const char *pMsgSecureWriting = "Writing Secure File...";
@ -297,7 +296,12 @@ static BOOL WriteHWInfoFile( u8 region )
result = FALSE; result = FALSE;
} }
HWI_ModifyLanguage( region ); // CFGデータの修正
if (!HWI_ModifyLanguage( region ))
{
kamiFontPrintfConsoleEx(CONSOLE_RED, "Fail! Write TWLSettings\n" );
result = FALSE;
}
// InstalledSoftBoxCount, FreeSoftBoxCount の値を現在のNANDの状態に合わせて更新します。 // InstalledSoftBoxCount, FreeSoftBoxCount の値を現在のNANDの状態に合わせて更新します。
UpdateNandBoxCount(); UpdateNandBoxCount();