From f0890834625cc22a273baf829a29af4450455f99 Mon Sep 17 00:00:00 2001 From: yoshida_teruhisa Date: Thu, 28 Aug 2008 04:16:47 +0000 Subject: [PATCH] =?UTF-8?q?menuAppManager=20=E3=83=BB=E4=B8=8D=E6=AD=A3?= =?UTF-8?q?=E3=81=AA=E3=82=BF=E3=82=A4=E3=83=88=E3=83=AB=E3=83=84=E3=83=AA?= =?UTF-8?q?=E3=83=BC=E3=81=AE=E6=B6=88=E5=8E=BB=E5=87=A6=E7=90=86=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=20=E3=83=BB=E3=83=90=E3=83=8A=E3=83=BC=E8=AA=AD?= =?UTF-8?q?=E3=81=BF=E8=BE=BC=E3=81=BF=E6=99=82=E3=80=81=E3=83=90=E3=83=8A?= =?UTF-8?q?=E3=83=BC=E3=81=8C=E3=81=86=E3=81=BE=E3=81=8F=E8=AA=AD=E3=81=BF?= =?UTF-8?q?=E8=BE=BC=E3=82=81=E3=81=AA=E3=81=8F=E3=81=A6=E3=82=82=E3=82=BC?= =?UTF-8?q?=E3=83=AD=E3=82=AF=E3=83=AA=E3=82=A2=E3=81=99=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E5=A4=89=E6=9B=B4=20=E3=83=BB=E3=83=98=E3=83=83?= =?UTF-8?q?=E3=83=80=E6=83=85=E5=A0=B1=E3=81=AE=E3=81=BF=E5=8F=96=E5=BE=97?= =?UTF-8?q?=E3=81=99=E3=82=8B=EF=BC=88=E7=9B=B4=E6=8E=A5=E8=B5=B7=E5=8B=95?= =?UTF-8?q?=EF=BC=89=E3=83=91=E3=82=B9=E3=81=AE=E3=81=A8=E3=81=8D=E3=81=AF?= =?UTF-8?q?FreeBoxCount=E5=80=A4=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=97?= =?UTF-8?q?=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E5=A4=89=E6=9B=B4?= 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@2301 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../util/ARM9/src/util_menuAppManager.c | 114 ++++++++++-------- 1 file changed, 62 insertions(+), 52 deletions(-) diff --git a/build/libraries_sysmenu/util/ARM9/src/util_menuAppManager.c b/build/libraries_sysmenu/util/ARM9/src/util_menuAppManager.c index 3abce8ce..5fbfd4e9 100644 --- a/build/libraries_sysmenu/util/ARM9/src/util_menuAppManager.c +++ b/build/libraries_sysmenu/util/ARM9/src/util_menuAppManager.c @@ -380,7 +380,17 @@ static void AMN_initCardTitleList_() { } -static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData ) +// 指定されたtitleIDのタイトルツリーを消去 +#define TITLE_TREE_PATH_LENGTH 12+8+1+8+1 +static void AMNi_deleteTitleTree( NAMTitleId titleID ) +{ + char path[TITLE_TREE_PATH_LENGTH];// "nand:/title/" + "%08x" + "/" + "%08x" + "\0" + STD_TSNPrintf( path, TITLE_TREE_PATH_LENGTH, "nand:/title/%08x/%08x", (u32)( titleID >> 32 ), (u32)titleID ); + (void)FS_DeleteDirectoryAuto( path ); + OS_TPrintf( "AMNi_deleteTitleTree : delete %s\n", path ); +} + +static BOOL AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData ) { TitleProperty* pTitleProp; // header情報の取得 @@ -394,12 +404,13 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData ) char path[FS_ENTRY_LONGNAME_MAX]; s32 readLen; u32 offset; + BOOL isBannerExist = FALSE; s32 rhArrayLen = cNandTitleIndexStart + sNandAppRomHeaderArrayLength; // もう入らない if (rhArrayLen >= OS_TITLEIDLIST_MAX) { - return; + return FALSE; } FS_InitFile(file); @@ -421,7 +432,9 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData ) if(readLen != NAM_OK){ // error SDK_ASSERT( FALSE ); - return; + // タイトル消去 + AMNi_deleteTitleTree( titleID ); + return FALSE; } #if (MEASURE_BANNER_LOAD_TIME == 1) @@ -434,7 +447,9 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData ) { // error SDK_ASSERT( FALSE ); - return; + // タイトル消去 + AMNi_deleteTitleTree( titleID ); + return FALSE; } #if (MEASURE_BANNER_LOAD_TIME == 1) @@ -448,7 +463,9 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData ) // error SDK_ASSERT( FALSE ); FS_CloseFile(file); - return; + // タイトル消去 + AMNi_deleteTitleTree( titleID ); + return FALSE; } offset = s_AllRomHeaderArray[rhArrayLen].banner_offset; @@ -476,7 +493,7 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData ) s_AllRomHeaderArray[rhArrayLen].titleID = titleID; sNandAppRomHeaderArrayLength++; - return; + return FALSE; } if(s_AllRomHeaderArray[rhArrayLen].platform_code & PLATFORM_CODE_FLAG_TWL){ @@ -484,13 +501,13 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData ) if( !UTL_CheckAppRegion( s_AllRomHeaderArray[rhArrayLen].card_region_bitmap ) ) { OS_TPrintf( "Region Check NG : %llx\n", titleID ); FS_CloseFile(file); - return; + return FALSE; } } if( !UTL_CheckAppCRC16( &s_AllRomHeaderArray[rhArrayLen] ) ) { OS_TPrintf( "CRC16 Check NG : %llx\n", titleID ); FS_CloseFile(file); - return; + return FALSE; } sNandAppRomHeaderArrayLength++; @@ -498,7 +515,7 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData ) // もうランチャー表示用情報は数がオーバーしてるか、表示用情報を読まない設定 if ( ( sNandTitleListLengthForLauncher >= cNandTitleArrayMax ) || !readShowData ) { FS_CloseFile(file); - return; + return FALSE; } // 以下は表示するアプリのみ(現在リストにあるデータ数がNandタイトル数の最大を超えていない場合)の処理 @@ -511,6 +528,7 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData ) // バナーの取得 // バナーが存在する場合のみリード + if( offset ) { #if (MEASURE_BANNER_LOAD_TIME == 1) @@ -518,44 +536,38 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData ) #endif bSuccess = FS_SeekFile(file, (s32)offset, FS_SEEK_SET); - if( ! bSuccess ) + if( bSuccess ) { - // error - SDK_ASSERT( FALSE ); - FS_CloseFile(file); - return; - } - #if (MEASURE_BANNER_LOAD_TIME == 1) - OS_TPrintf( "FS_SeekFile banner: %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) ); - start = OS_GetTick(); + OS_TPrintf( "FS_SeekFile banner: %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) ); + start = OS_GetTick(); #endif - readLen = FS_ReadFile( file, pTitleProp->pBanner, (s32)sizeof(TWLBannerFile) ); - if( readLen != (s32)sizeof(TWLBannerFile) ) - { - // error - SDK_ASSERT( FALSE ); - FS_CloseFile(file); - return; + readLen = FS_ReadFile( file, pTitleProp->pBanner, (s32)sizeof(TWLBannerFile) ); + if( readLen == (s32)sizeof(TWLBannerFile) ) + { + +#if (MEASURE_BANNER_LOAD_TIME == 1) + OS_TPrintf( "FS_ReadFile banner: %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) ); + start = OS_GetTick(); +#endif + + // バナーチェックリクエスト送信。 + OS_SendMessage(&sCheckMsgQueue, (OSMessage)(pTitleProp->pBanner), OS_MESSAGE_BLOCK); + +#if (MEASURE_BANNER_LOAD_TIME == 1) + OS_TPrintf( "check banner: %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) ); +#endif + isBannerExist = TRUE; + } } + } -#if (MEASURE_BANNER_LOAD_TIME == 1) - OS_TPrintf( "FS_ReadFile banner: %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) ); - start = OS_GetTick(); -#endif - - // バナーチェックリクエスト送信。 - OS_SendMessage(&sCheckMsgQueue, (OSMessage)(pTitleProp->pBanner), OS_MESSAGE_BLOCK); - -#if (MEASURE_BANNER_LOAD_TIME == 1) - OS_TPrintf( "check banner: %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) ); -#endif - - }else { + if( !isBannerExist ) + { // バナーが存在しない場合はバッファクリア MI_CpuClearFast( pTitleProp->pBanner, sizeof(TWLBannerFile) ); - } + } #if (MEASURE_BANNER_LOAD_TIME == 1) start = OS_GetTick(); @@ -600,6 +612,8 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData ) } sNandTitleListLengthForLauncher++; + + return TRUE; } /*! @@ -680,12 +694,13 @@ static void AMN_initNandTitleList_() for (l = 0; l < sNandAllTitleListLength; l++) { if (AMN_isTitleIdValidForLauncher(pNandAllTitleIDList[l])) { - AMNi_getAndAddNandTitleData( pNandAllTitleIDList[l], TRUE ); // 本体設定の場合、アプリマネージャ用indexは飛び飛びになったり、ForSetting()が返す値(個数)より大きくなるので // getNandTitleListLengthForSetting()は用意しない。 - - // FreeboxCount更新のためのカウンタ - count_valid_app_for_launcher++; + if( AMNi_getAndAddNandTitleData( pNandAllTitleIDList[l], TRUE ) ) + { + // FreeboxCount更新のためのカウンタ + count_valid_app_for_launcher++; + } } } @@ -696,7 +711,7 @@ static void AMN_initNandTitleList_() // ローンチ対象でないタイトルの情報の取得 for (l = 0; l < sNandAllTitleListLength; l++) { if (!AMN_isTitleIdValidForLauncher(pNandAllTitleIDList[l])) { - AMNi_getAndAddNandTitleData( pNandAllTitleIDList[l], FALSE ); + (void)AMNi_getAndAddNandTitleData( pNandAllTitleIDList[l], FALSE ); } } @@ -711,7 +726,6 @@ static void AMN_initNandTitleRomHeaderShortList_() s32 ret; s32 l; NAMTitleId* pNandAllTitleIDList = NULL; - u8 count_valid_app_for_launcher = 0; // インポートされているタイトルの取得 sNandAllTitleListLength = NAM_GetNumTitles(); @@ -741,15 +755,11 @@ static void AMN_initNandTitleRomHeaderShortList_() // タイトルの情報(ヘッダのみ)の取得 for (l = 0; l < sNandAllTitleListLength; l++) { - AMNi_getAndAddNandTitleData( pNandAllTitleIDList[l], FALSE ); - if (AMN_isTitleIdValidForLauncher(pNandAllTitleIDList[l])) { - // FreeboxCount更新のためのカウンタ - count_valid_app_for_launcher++; - } + (void)AMNi_getAndAddNandTitleData( pNandAllTitleIDList[l], FALSE ); } - // FreeboxCount更新 - AMNi_updateFreeBoxCount( count_valid_app_for_launcher ); + // バナー表示しない場合、FreeboxCount更新は必要ない + // (怖いのは表示とカウントが食い違う事なので) if (pNandAllTitleIDList) { AMNi_Free( pNandAllTitleIDList );