mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
menuAppManager
・不正なタイトルツリーの消去処理追加 ・バナー読み込み時、バナーがうまく読み込めなくてもゼロクリアするよう変更 ・ヘッダ情報のみ取得する(直接起動)パスのときはFreeBoxCount値を修正しないよう変更 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2301 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
db16714301
commit
f089083462
@ -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;
|
TitleProperty* pTitleProp;
|
||||||
// header情報の取得
|
// header情報の取得
|
||||||
@ -394,12 +404,13 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData )
|
|||||||
char path[FS_ENTRY_LONGNAME_MAX];
|
char path[FS_ENTRY_LONGNAME_MAX];
|
||||||
s32 readLen;
|
s32 readLen;
|
||||||
u32 offset;
|
u32 offset;
|
||||||
|
BOOL isBannerExist = FALSE;
|
||||||
|
|
||||||
s32 rhArrayLen = cNandTitleIndexStart + sNandAppRomHeaderArrayLength;
|
s32 rhArrayLen = cNandTitleIndexStart + sNandAppRomHeaderArrayLength;
|
||||||
|
|
||||||
// もう入らない
|
// もう入らない
|
||||||
if (rhArrayLen >= OS_TITLEIDLIST_MAX) {
|
if (rhArrayLen >= OS_TITLEIDLIST_MAX) {
|
||||||
return;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
FS_InitFile(file);
|
FS_InitFile(file);
|
||||||
@ -421,7 +432,9 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData )
|
|||||||
if(readLen != NAM_OK){
|
if(readLen != NAM_OK){
|
||||||
// error
|
// error
|
||||||
SDK_ASSERT( FALSE );
|
SDK_ASSERT( FALSE );
|
||||||
return;
|
// タイトル消去
|
||||||
|
AMNi_deleteTitleTree( titleID );
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if (MEASURE_BANNER_LOAD_TIME == 1)
|
#if (MEASURE_BANNER_LOAD_TIME == 1)
|
||||||
@ -434,7 +447,9 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData )
|
|||||||
{
|
{
|
||||||
// error
|
// error
|
||||||
SDK_ASSERT( FALSE );
|
SDK_ASSERT( FALSE );
|
||||||
return;
|
// タイトル消去
|
||||||
|
AMNi_deleteTitleTree( titleID );
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if (MEASURE_BANNER_LOAD_TIME == 1)
|
#if (MEASURE_BANNER_LOAD_TIME == 1)
|
||||||
@ -448,7 +463,9 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData )
|
|||||||
// error
|
// error
|
||||||
SDK_ASSERT( FALSE );
|
SDK_ASSERT( FALSE );
|
||||||
FS_CloseFile(file);
|
FS_CloseFile(file);
|
||||||
return;
|
// タイトル消去
|
||||||
|
AMNi_deleteTitleTree( titleID );
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
offset = s_AllRomHeaderArray[rhArrayLen].banner_offset;
|
offset = s_AllRomHeaderArray[rhArrayLen].banner_offset;
|
||||||
@ -476,7 +493,7 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData )
|
|||||||
s_AllRomHeaderArray[rhArrayLen].titleID = titleID;
|
s_AllRomHeaderArray[rhArrayLen].titleID = titleID;
|
||||||
|
|
||||||
sNandAppRomHeaderArrayLength++;
|
sNandAppRomHeaderArrayLength++;
|
||||||
return;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(s_AllRomHeaderArray[rhArrayLen].platform_code & PLATFORM_CODE_FLAG_TWL){
|
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 ) ) {
|
if( !UTL_CheckAppRegion( s_AllRomHeaderArray[rhArrayLen].card_region_bitmap ) ) {
|
||||||
OS_TPrintf( "Region Check NG : %llx\n", titleID );
|
OS_TPrintf( "Region Check NG : %llx\n", titleID );
|
||||||
FS_CloseFile(file);
|
FS_CloseFile(file);
|
||||||
return;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( !UTL_CheckAppCRC16( &s_AllRomHeaderArray[rhArrayLen] ) ) {
|
if( !UTL_CheckAppCRC16( &s_AllRomHeaderArray[rhArrayLen] ) ) {
|
||||||
OS_TPrintf( "CRC16 Check NG : %llx\n", titleID );
|
OS_TPrintf( "CRC16 Check NG : %llx\n", titleID );
|
||||||
FS_CloseFile(file);
|
FS_CloseFile(file);
|
||||||
return;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
sNandAppRomHeaderArrayLength++;
|
sNandAppRomHeaderArrayLength++;
|
||||||
@ -498,7 +515,7 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData )
|
|||||||
// もうランチャー表示用情報は数がオーバーしてるか、表示用情報を読まない設定
|
// もうランチャー表示用情報は数がオーバーしてるか、表示用情報を読まない設定
|
||||||
if ( ( sNandTitleListLengthForLauncher >= cNandTitleArrayMax ) || !readShowData ) {
|
if ( ( sNandTitleListLengthForLauncher >= cNandTitleArrayMax ) || !readShowData ) {
|
||||||
FS_CloseFile(file);
|
FS_CloseFile(file);
|
||||||
return;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 以下は表示するアプリのみ(現在リストにあるデータ数がNandタイトル数の最大を超えていない場合)の処理
|
// 以下は表示するアプリのみ(現在リストにあるデータ数がNandタイトル数の最大を超えていない場合)の処理
|
||||||
@ -511,6 +528,7 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData )
|
|||||||
|
|
||||||
// バナーの取得
|
// バナーの取得
|
||||||
// バナーが存在する場合のみリード
|
// バナーが存在する場合のみリード
|
||||||
|
|
||||||
if( offset ) {
|
if( offset ) {
|
||||||
|
|
||||||
#if (MEASURE_BANNER_LOAD_TIME == 1)
|
#if (MEASURE_BANNER_LOAD_TIME == 1)
|
||||||
@ -518,27 +536,16 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData )
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
bSuccess = FS_SeekFile(file, (s32)offset, FS_SEEK_SET);
|
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)
|
#if (MEASURE_BANNER_LOAD_TIME == 1)
|
||||||
OS_TPrintf( "FS_SeekFile banner: %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
|
OS_TPrintf( "FS_SeekFile banner: %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
|
||||||
start = OS_GetTick();
|
start = OS_GetTick();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
readLen = FS_ReadFile( file, pTitleProp->pBanner, (s32)sizeof(TWLBannerFile) );
|
readLen = FS_ReadFile( file, pTitleProp->pBanner, (s32)sizeof(TWLBannerFile) );
|
||||||
if( readLen != (s32)sizeof(TWLBannerFile) )
|
if( readLen == (s32)sizeof(TWLBannerFile) )
|
||||||
{
|
{
|
||||||
// error
|
|
||||||
SDK_ASSERT( FALSE );
|
|
||||||
FS_CloseFile(file);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if (MEASURE_BANNER_LOAD_TIME == 1)
|
#if (MEASURE_BANNER_LOAD_TIME == 1)
|
||||||
OS_TPrintf( "FS_ReadFile banner: %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
|
OS_TPrintf( "FS_ReadFile banner: %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
|
||||||
@ -551,8 +558,13 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData )
|
|||||||
#if (MEASURE_BANNER_LOAD_TIME == 1)
|
#if (MEASURE_BANNER_LOAD_TIME == 1)
|
||||||
OS_TPrintf( "check banner: %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
|
OS_TPrintf( "check banner: %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
|
||||||
#endif
|
#endif
|
||||||
|
isBannerExist = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}else {
|
if( !isBannerExist )
|
||||||
|
{
|
||||||
// バナーが存在しない場合はバッファクリア
|
// バナーが存在しない場合はバッファクリア
|
||||||
MI_CpuClearFast( pTitleProp->pBanner, sizeof(TWLBannerFile) );
|
MI_CpuClearFast( pTitleProp->pBanner, sizeof(TWLBannerFile) );
|
||||||
}
|
}
|
||||||
@ -600,6 +612,8 @@ static void AMNi_getAndAddNandTitleData( NAMTitleId titleID, BOOL readShowData )
|
|||||||
}
|
}
|
||||||
|
|
||||||
sNandTitleListLengthForLauncher++;
|
sNandTitleListLengthForLauncher++;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -680,14 +694,15 @@ static void AMN_initNandTitleList_()
|
|||||||
|
|
||||||
for (l = 0; l < sNandAllTitleListLength; l++) {
|
for (l = 0; l < sNandAllTitleListLength; l++) {
|
||||||
if (AMN_isTitleIdValidForLauncher(pNandAllTitleIDList[l])) {
|
if (AMN_isTitleIdValidForLauncher(pNandAllTitleIDList[l])) {
|
||||||
AMNi_getAndAddNandTitleData( pNandAllTitleIDList[l], TRUE );
|
|
||||||
// 本体設定の場合、アプリマネージャ用indexは飛び飛びになったり、ForSetting()が返す値(個数)より大きくなるので
|
// 本体設定の場合、アプリマネージャ用indexは飛び飛びになったり、ForSetting()が返す値(個数)より大きくなるので
|
||||||
// getNandTitleListLengthForSetting()は用意しない。
|
// getNandTitleListLengthForSetting()は用意しない。
|
||||||
|
if( AMNi_getAndAddNandTitleData( pNandAllTitleIDList[l], TRUE ) )
|
||||||
|
{
|
||||||
// FreeboxCount更新のためのカウンタ
|
// FreeboxCount更新のためのカウンタ
|
||||||
count_valid_app_for_launcher++;
|
count_valid_app_for_launcher++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// FreeboxCount更新
|
// FreeboxCount更新
|
||||||
AMNi_updateFreeBoxCount( count_valid_app_for_launcher );
|
AMNi_updateFreeBoxCount( count_valid_app_for_launcher );
|
||||||
@ -696,7 +711,7 @@ static void AMN_initNandTitleList_()
|
|||||||
// ローンチ対象でないタイトルの情報の取得
|
// ローンチ対象でないタイトルの情報の取得
|
||||||
for (l = 0; l < sNandAllTitleListLength; l++) {
|
for (l = 0; l < sNandAllTitleListLength; l++) {
|
||||||
if (!AMN_isTitleIdValidForLauncher(pNandAllTitleIDList[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 ret;
|
||||||
s32 l;
|
s32 l;
|
||||||
NAMTitleId* pNandAllTitleIDList = NULL;
|
NAMTitleId* pNandAllTitleIDList = NULL;
|
||||||
u8 count_valid_app_for_launcher = 0;
|
|
||||||
|
|
||||||
// インポートされているタイトルの取得
|
// インポートされているタイトルの取得
|
||||||
sNandAllTitleListLength = NAM_GetNumTitles();
|
sNandAllTitleListLength = NAM_GetNumTitles();
|
||||||
@ -741,15 +755,11 @@ static void AMN_initNandTitleRomHeaderShortList_()
|
|||||||
|
|
||||||
// タイトルの情報(ヘッダのみ)の取得
|
// タイトルの情報(ヘッダのみ)の取得
|
||||||
for (l = 0; l < sNandAllTitleListLength; l++) {
|
for (l = 0; l < sNandAllTitleListLength; l++) {
|
||||||
AMNi_getAndAddNandTitleData( pNandAllTitleIDList[l], FALSE );
|
(void)AMNi_getAndAddNandTitleData( pNandAllTitleIDList[l], FALSE );
|
||||||
if (AMN_isTitleIdValidForLauncher(pNandAllTitleIDList[l])) {
|
|
||||||
// FreeboxCount更新のためのカウンタ
|
|
||||||
count_valid_app_for_launcher++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// FreeboxCount更新
|
// バナー表示しない場合、FreeboxCount更新は必要ない
|
||||||
AMNi_updateFreeBoxCount( count_valid_app_for_launcher );
|
// (怖いのは表示とカウントが食い違う事なので)
|
||||||
|
|
||||||
if (pNandAllTitleIDList) {
|
if (pNandAllTitleIDList) {
|
||||||
AMNi_Free( pNandAllTitleIDList );
|
AMNi_Free( pNandAllTitleIDList );
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user