mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
ランチャーからのTWLアプリブート前にタイトルIDリストを生成、格納するよう変更
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@909 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
165be5da68
commit
bab56841b2
@ -56,6 +56,7 @@ static void SYSMi_EnableHotSW( BOOL enable );
|
|||||||
static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle );
|
static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle );
|
||||||
static void SYSMi_Relocate( void );
|
static void SYSMi_Relocate( void );
|
||||||
static BOOL SYSMi_CheckTitlePointer( TitleProperty *pBootTitle );
|
static BOOL SYSMi_CheckTitlePointer( TitleProperty *pBootTitle );
|
||||||
|
static void SYSMi_makeTitleIdList( TitleProperty *pTitleList );
|
||||||
|
|
||||||
// global variable-------------------------------------------------------------
|
// global variable-------------------------------------------------------------
|
||||||
// static variable-------------------------------------------------------------
|
// static variable-------------------------------------------------------------
|
||||||
@ -260,6 +261,8 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum )
|
|||||||
// 最終リストに対して、カードアプリ部分を除いた部分をクリア
|
// 最終リストに対して、カードアプリ部分を除いた部分をクリア
|
||||||
MI_CpuClearFast( &pTitleList_Nand[ 1 ], sizeof(TitleProperty) * ( listNum - 1 ) );
|
MI_CpuClearFast( &pTitleList_Nand[ 1 ], sizeof(TitleProperty) * ( listNum - 1 ) );
|
||||||
|
|
||||||
|
listNum--; // カードのぶん引いておく
|
||||||
|
|
||||||
listNum = ( validNum < listNum ) ? validNum : listNum;
|
listNum = ( validNum < listNum ) ? validNum : listNum;
|
||||||
|
|
||||||
for(l=0;l<listNum;l++)
|
for(l=0;l<listNum;l++)
|
||||||
@ -779,7 +782,7 @@ static AuthResult SYSMi_AuthenticateNTRNandAppHeader( TitleProperty *pBootTitle)
|
|||||||
// NTR版ダウンロードアプリ(TMPアプリ)のヘッダ認証処理
|
// NTR版ダウンロードアプリ(TMPアプリ)のヘッダ認証処理
|
||||||
static AuthResult SYSMi_AuthenticateNTRDownloadAppHeader( TitleProperty *pBootTitle)
|
static AuthResult SYSMi_AuthenticateNTRDownloadAppHeader( TitleProperty *pBootTitle)
|
||||||
{
|
{
|
||||||
|
#pragma unused(pBootTitle)
|
||||||
ROM_Header *head;
|
ROM_Header *head;
|
||||||
OSTick start;
|
OSTick start;
|
||||||
start = OS_GetTick();
|
start = OS_GetTick();
|
||||||
@ -982,7 +985,7 @@ BOOL SYSM_IsAuthenticateTitleFinished( void )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ロード済みの指定タイトルの認証とブートを行う
|
// ロード済みの指定タイトルの認証とブートを行う
|
||||||
AuthResult SYSM_TryToBootTitle( TitleProperty *pBootTitle )
|
AuthResult SYSM_TryToBootTitle( TitleProperty *pBootTitle, TitleProperty *pTitleList )
|
||||||
{
|
{
|
||||||
if(s_authResult != AUTH_RESULT_SUCCEEDED)
|
if(s_authResult != AUTH_RESULT_SUCCEEDED)
|
||||||
{
|
{
|
||||||
@ -997,11 +1000,137 @@ AuthResult SYSM_TryToBootTitle( TitleProperty *pBootTitle )
|
|||||||
// HW_WM_BOOT_BUFへのブート情報セット
|
// HW_WM_BOOT_BUFへのブート情報セット
|
||||||
( (OSBootInfo *)OS_GetBootInfo() )->boot_type = s_launcherToOSBootType[ pBootTitle->flags.bootType ];
|
( (OSBootInfo *)OS_GetBootInfo() )->boot_type = s_launcherToOSBootType[ pBootTitle->flags.bootType ];
|
||||||
|
|
||||||
|
// タイトルIDリストの作成
|
||||||
|
SYSMi_makeTitleIdList( pTitleList );
|
||||||
|
|
||||||
BOOT_Ready(); // never return.
|
BOOT_Ready(); // never return.
|
||||||
|
|
||||||
return AUTH_RESULT_SUCCEEDED;
|
return AUTH_RESULT_SUCCEEDED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// タイトルIDリストの作成
|
||||||
|
static void SYSMi_makeTitleIdList( TitleProperty *pTitleList )
|
||||||
|
{
|
||||||
|
// [TODO:]現在ランチャーで表示できるタイトル(ブート可能タイトル)のみ
|
||||||
|
// リストに入れるようになっているが
|
||||||
|
// ブート不可タイトルについても対応する必要あり?(特にセキュアアプリの場合)
|
||||||
|
OSTitleIDList *list = ( OSTitleIDList * )HW_OS_TITLE_ID_LIST;
|
||||||
|
ROM_Header_Short *hs = ( ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF;
|
||||||
|
int l;
|
||||||
|
u8 count = 0;
|
||||||
|
|
||||||
|
// とりあえずゼロクリア
|
||||||
|
MI_CpuClear8( (void *)HW_OS_TITLE_ID_LIST, HW_OS_TITLE_ID_LIST_SIZE );
|
||||||
|
|
||||||
|
// これから起動するアプリがTWLアプリでない
|
||||||
|
if( !hs->platform_code )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
// ランチャーで作成したリストを使わないバージョン
|
||||||
|
NAMTitleId *pTitleIDList = NULL;
|
||||||
|
s32 getNum;
|
||||||
|
|
||||||
|
// インストールされているタイトルの取得
|
||||||
|
getNum = NAM_GetNumTitles();
|
||||||
|
pTitleIDList = SYSM_Alloc( sizeof(NAMTitleId) * getNum ); // Free忘れず
|
||||||
|
(void)NAM_GetTitleList( pTitleIDList, (u32)getNum );
|
||||||
|
*/
|
||||||
|
for(l=0;l<LAUNCHER_TITLE_LIST_NUM;l++)
|
||||||
|
{
|
||||||
|
ROM_Header_Short e_hs;
|
||||||
|
ROM_Header_Short *pe_hs;
|
||||||
|
int m;
|
||||||
|
BOOL same_maker_code = TRUE;
|
||||||
|
char path[256];
|
||||||
|
FSFile file[1];
|
||||||
|
BOOL bSuccess;
|
||||||
|
s32 readLen;
|
||||||
|
if(l==0)
|
||||||
|
{
|
||||||
|
// カードアプリ
|
||||||
|
if(SYSM_IsExistCard())
|
||||||
|
{
|
||||||
|
pe_hs = (ROM_Header_Short *)SYSM_CARD_ROM_HEADER_BAK;// BAKの値を使う
|
||||||
|
}
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
if(pTitleList[l].titleID == NULL)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// romヘッダ読み込み
|
||||||
|
NAM_GetTitleBootContentPathFast(path, pTitleList[l].titleID);
|
||||||
|
FS_InitFile( file );
|
||||||
|
bSuccess = FS_OpenFileEx(file, path, FS_FILEMODE_R);
|
||||||
|
if( ! bSuccess )
|
||||||
|
{
|
||||||
|
OS_TPrintf("SYSMi_makeTitleIdList failed: cant open file(%s)\n",path);
|
||||||
|
FS_CloseFile(file);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
bSuccess = FS_SeekFile(file, 0x00000000, FS_SEEK_SET);
|
||||||
|
if( ! bSuccess )
|
||||||
|
{
|
||||||
|
OS_TPrintf("SYSMi_makeTitleIdList failed: cant seek file(0)\n");
|
||||||
|
FS_CloseFile(file);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
readLen = FS_ReadFile(file, &e_hs, (s32)sizeof(e_hs));
|
||||||
|
if( readLen != (s32)sizeof(e_hs) )
|
||||||
|
{
|
||||||
|
OS_TPrintf("SYSMi_makeTitleIdList failed: cant read file(%p, %d, %d, %d)\n", e_hs, 0, sizeof(e_hs), readLen);
|
||||||
|
FS_CloseFile(file);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
FS_CloseFile(file);
|
||||||
|
pe_hs = (ROM_Header_Short *)&e_hs;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(m=0;m<MAKER_CODE_MAX;m++)
|
||||||
|
{
|
||||||
|
if(hs->maker_code[m] != pe_hs->maker_code[m])
|
||||||
|
{
|
||||||
|
same_maker_code = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// セキュアアプリの場合か、メーカーコードが同じ場合は
|
||||||
|
if( (hs->titleID & TITLE_ID_HI_SECURE_FLAG_MASK) ||
|
||||||
|
( same_maker_code ) )
|
||||||
|
{
|
||||||
|
// リストに追加
|
||||||
|
list->TitleID[count] = pTitleList[l].titleID;
|
||||||
|
// sameMakerFlagをON
|
||||||
|
list->sameMakerFlag[count/8] |= (u8)(0x1 << (count%8));
|
||||||
|
// Prv,Pubそれぞれセーブデータがあるか見て、存在すればフラグON
|
||||||
|
if(pe_hs->public_save_data_size != 0)
|
||||||
|
{
|
||||||
|
list->publicFlag[count/8] |= (u8)(0x1 << (count%8));
|
||||||
|
}
|
||||||
|
if(pe_hs->private_save_data_size != 0)
|
||||||
|
{
|
||||||
|
list->privateFlag[count/8] |= (u8)(0x1 << (count%8));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ジャンプ可能ならば
|
||||||
|
if( pe_hs->permit_landing_normal_jump )
|
||||||
|
{
|
||||||
|
// リストに追加してジャンプ可能フラグON
|
||||||
|
list->TitleID[count] = pTitleList[l].titleID;
|
||||||
|
list->appJumpFlag[count/8] |= (u8)(0x1 << (count%8));
|
||||||
|
}
|
||||||
|
|
||||||
|
// ここまでのうちに、list->TitleID[count]が編集されていたらcountインクリメント
|
||||||
|
if( list->TitleID[count] != NULL )
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
list->num = count;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
// 指定タイトルの認証&ロード ※1フレームじゃ終わらん。
|
// 指定タイトルの認証&ロード ※1フレームじゃ終わらん。
|
||||||
|
|||||||
@ -282,7 +282,7 @@ void TwlMain( void )
|
|||||||
if( ( direct_boot || ( !direct_boot && LauncherFadeout( s_titleList ) ) ) &&
|
if( ( direct_boot || ( !direct_boot && LauncherFadeout( s_titleList ) ) ) &&
|
||||||
SYSM_IsAuthenticateTitleFinished() )
|
SYSM_IsAuthenticateTitleFinished() )
|
||||||
{
|
{
|
||||||
switch ( SYSM_TryToBootTitle( pBootTitle ) ) { // アプリ認証結果取得orブート 成功時:never return
|
switch ( SYSM_TryToBootTitle( pBootTitle, s_titleList ) ) { // アプリ認証結果取得orブート 成功時:never return
|
||||||
case AUTH_RESULT_TITLE_LOAD_FAILED:
|
case AUTH_RESULT_TITLE_LOAD_FAILED:
|
||||||
case AUTH_RESULT_TITLE_POINTER_ERROR:
|
case AUTH_RESULT_TITLE_POINTER_ERROR:
|
||||||
case AUTH_RESULT_AUTHENTICATE_FAILED:
|
case AUTH_RESULT_AUTHENTICATE_FAILED:
|
||||||
|
|||||||
@ -104,7 +104,8 @@ extern void SYSM_StartLoadTitle( TitleProperty *pBootTitle ); //
|
|||||||
extern BOOL SYSM_IsLoadTitleFinished( void ); // SYSM_StartLoadTitleで起動したスレッドが終了したかどうかを確認
|
extern BOOL SYSM_IsLoadTitleFinished( void ); // SYSM_StartLoadTitleで起動したスレッドが終了したかどうかを確認
|
||||||
extern void SYSM_StartAuthenticateTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyを別スレッドで検証開始
|
extern void SYSM_StartAuthenticateTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyを別スレッドで検証開始
|
||||||
extern BOOL SYSM_IsAuthenticateTitleFinished( void ); // SYSM_StartAuthenticateTitleで起動したスレッドが終了したかどうかを確認
|
extern BOOL SYSM_IsAuthenticateTitleFinished( void ); // SYSM_StartAuthenticateTitleで起動したスレッドが終了したかどうかを確認
|
||||||
extern AuthResult SYSM_TryToBootTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyをブート
|
extern AuthResult SYSM_TryToBootTitle( TitleProperty *pBootTitle, TitleProperty *pTitleList );
|
||||||
|
// pBootTitleで指定したタイトルをブート
|
||||||
// 成功時は、never return.
|
// 成功時は、never return.
|
||||||
// デバイス制御
|
// デバイス制御
|
||||||
extern void SYSM_CaribrateTP( void ); // タッチパネルキャリブレーション
|
extern void SYSM_CaribrateTP( void ); // タッチパネルキャリブレーション
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user