From 633e5602b32999aef857f1c87c7c8953c9648783 Mon Sep 17 00:00:00 2001 From: yoshida_teruhisa Date: Mon, 16 Jun 2008 01:18:05 +0000 Subject: [PATCH] =?UTF-8?q?=E3=83=80=E3=82=A4=E3=83=AC=E3=82=AF=E3=83=88?= =?UTF-8?q?=E3=83=96=E3=83=BC=E3=83=88=E6=99=82=E3=80=81=E3=82=A2=E3=83=97?= =?UTF-8?q?=E3=83=AA=E3=81=AB=E5=BC=95=E3=81=8D=E6=B8=A1=E3=81=99=E3=82=BF?= =?UTF-8?q?=E3=82=A4=E3=83=88=E3=83=AB=E3=83=AA=E3=82=B9=E3=83=88=E3=81=8C?= =?UTF-8?q?=E3=81=8A=E3=81=8B=E3=81=97=E3=81=8F=E3=81=AA=E3=81=A3=E3=81=A6?= =?UTF-8?q?=E3=81=84=E3=81=9F=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= 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@1632 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../sysmenu/ARM9/src/title.c | 38 ++++++++++++++++++- build/systemMenu_RED/Launcher/ARM9/src/main.c | 5 ++- .../sysmenu/sysmenu_lib/common/sysmenu_api.h | 3 +- 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index 1c99c4bc..542bf6da 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -111,6 +111,8 @@ static u8 *s_calc_hash = NULL; static BOOL s_b_dev = FALSE; static BOOL s_result_phase1 = FALSE; +static BOOL s_nand_title_list_maker_info_enabled = FALSE; + static u8 dht_buffer[DS_HASH_TABLE_SIZE] ATTRIBUTE_ALIGN(256); static DHTFile *const dht = (DHTFile*)dht_buffer; static const u8* hash0; @@ -359,7 +361,7 @@ BOOL SYSMi_CopyCardBanner( void ) // インポートされているすべてのNANDアプリを列挙したリストの準備 -// SYSM_GetNandTitleListおよびSYSM_TryToBootTitle前に呼ぶ必要あり +// SYSM_GetNandTitleListおよびSYSM_GetNandTitleListMakerInfo前に呼ぶ必要あり BOOL SYSM_InitNandTitleList( void ) { OSTick start; @@ -481,9 +483,30 @@ static BOOL MakeTitleListMakerInfoFromTitleID( TitleListMakerInfo *info, OSTitle return SYSM_MakeTitleListMakerInfoFromHeader( info, &e_hs); } +// SYSM_InitNandTitleListを事前に呼ぶ必要あり +// この関数か、SYSM_GetNandTitleListのどちらかをSYSM_TryToBootTitle前に呼ぶ必要あり +void SYSM_GetNandTitleListMakerInfo( void ) +{ + int l; + + if( s_pTitleIDList == NULL || s_pTitleListMakerInfo == NULL ) + { + OS_TPrintf("SYSM_GetNandTitleListMakerInfo failed : SYSM_InitNandTitleList() is not called."); + return; + } + + for( l = 0; l < s_listLength; l++ ) { + MakeTitleListMakerInfoFromTitleID( &s_pTitleListMakerInfo[l], s_pTitleIDList[ l ] ); + } + + s_nand_title_list_maker_info_enabled = TRUE; +} + // ローンチ対象となるNANDタイトルリストの取得 // listNumには、pTitleList_Nandの長さを与える // 得られる最大のタイトル数は、(LAUNCHER_TITLE_LIST_NUM - 1)に制限される(ランチャーが表示できる最大数からカードぶんを引いた数) +// SYSM_InitNandTitleListを事前に呼ぶ必要あり +// この関数か、SYSM_GetNandTitleListMakerInfoのどちらかをSYSM_TryToBootTitle前に呼ぶ必要あり // return:取得したNANDタイトルの数 int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum ) { @@ -493,7 +516,11 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum ) int validNum = 0; NAMTitleId titleIDArray[ LAUNCHER_TITLE_LIST_NUM - 1 ];// ローンチ可能なタイトルリストの一時置き場 - if( s_pTitleIDList == NULL || s_pTitleListMakerInfo == NULL ) return -1; + if( s_pTitleIDList == NULL || s_pTitleListMakerInfo == NULL ) + { + OS_TPrintf("SYSM_GetNandTitleList failed : SYSM_InitNandTitleList() is not called."); + return -1; + } // 取得したタイトルがローンチ対象かどうかをチェック for( l = 0; l < s_listLength; l++ ) { @@ -516,6 +543,7 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum ) { MakeTitleListMakerInfoFromTitleID( &s_pTitleListMakerInfo[l], s_pTitleIDList[ l ] ); } + s_nand_title_list_maker_info_enabled = TRUE; // 念のため残り領域を0クリア for( l = validNum; l < LAUNCHER_TITLE_LIST_NUM - 1; l++ ) { @@ -1676,6 +1704,7 @@ BOOL SYSM_IsAuthenticateTitleFinished( void ) } // ロード済みの指定タイトルの認証とブートを行う +// SYSM_GetNandTitleListまたはSYSM_GetNandTitleListMakerInfoのどちらかをSYSM_TryToBootTitle前に呼ぶ必要あり AuthResult SYSM_TryToBootTitle( TitleProperty *pBootTitle ) { if(s_authResult != AUTH_RESULT_SUCCEEDED) @@ -1737,6 +1766,11 @@ static void SYSMi_makeTitleIdList( void ) return; } + if( !s_nand_title_list_maker_info_enabled ) + { + OS_TPrintf("SYSMi_makeTitleIdList failed: SYSM_GetNandTitleList or SYSM_GetNandTitleListMakerInfo is not called.\n"); + } + // とりあえずゼロクリア MI_CpuClear8( (void *)HW_OS_TITLE_ID_LIST, HW_OS_TITLE_ID_LIST_SIZE ); diff --git a/build/systemMenu_RED/Launcher/ARM9/src/main.c b/build/systemMenu_RED/Launcher/ARM9/src/main.c index 889a6031..23b978d3 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/main.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/main.c @@ -303,7 +303,10 @@ void TwlMain( void ) if( !pBootTitle ) { // NAND & カードアプリリスト取得 (void)SYSM_GetNandTitleList( s_titleList, LAUNCHER_TITLE_LIST_NUM ); // NANDアプリリストの取得(内蔵アプリはs_titleList[1]から格納される) - } + }else + { + SYSM_GetNandTitleListMakerInfo(); // アプリに引き渡すタイトルリスト作成用情報の取得 + } // end時間計測5 #if (MEASURE_TIME == 1) OS_TPrintf( "GetNandTitleList : %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) ); diff --git a/include/sysmenu/sysmenu_lib/common/sysmenu_api.h b/include/sysmenu/sysmenu_lib/common/sysmenu_api.h index 7fe22f30..d4110111 100644 --- a/include/sysmenu/sysmenu_lib/common/sysmenu_api.h +++ b/include/sysmenu/sysmenu_lib/common/sysmenu_api.h @@ -127,6 +127,7 @@ extern int SYSM_GetCardTitleList( TitleProperty *pTitleList_Card ); // extern BOOL SYSM_InitNandTitleList( void ); // NANDアプリタイトルリスト取得準備 extern void SYSM_FreeNandTitleList( void ); // NANDアプリタイトルリスト extern int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int size ); // NAND アプリタイトルリストの取得 +extern void SYSM_GetNandTitleListMakerInfo( void ); // アプリ引き渡しタイトルリスト作成用情報の取得(ダイレクトブート用) // アプリ起動 extern void SYSM_StartLoadTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyを別スレッドでロード開始 @@ -151,7 +152,7 @@ extern BOOL SYSM_IsLoadTitlePaused(void); // extern void SYSM_ResumeLoadingThread( BOOL force ); // ローディングスレッドが一時停止していたら再開 extern BOOL SYSM_MakeTitleListMakerInfoFromHeader( TitleListMakerInfo *info, ROM_Header_Short *hs); - // タイトルリスト作成用情報をヘッダ情報から作成 + // アプリ引き渡しタイトルリスト作成用情報をヘッダ情報から作成 #endif