アプリ起動処理にセーブファイルなどのリカバリ処理を追加

ランチャーのアプリ起動時フェードアウト時間が長すぎたので短縮(約2秒->約1秒)

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1868 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yoshida_teruhisa 2008-07-14 04:22:19 +00:00
parent b1285facd1
commit 34a35c476c
2 changed files with 102 additions and 10 deletions

View File

@ -20,6 +20,7 @@
#include <firm/format/from_firm.h>
#include <firm/hw/ARM9/mmap_firm.h>
#include <sysmenu/util_menuAppManager.h>
#include <sysmenu/util_recoveryFile.h>
#include "internal_api.h"
#include "fs_wram.h"
@ -61,6 +62,8 @@
#define SYSM_TITLE_MESSAGE_ARRAY_MAX 1
#define SIZE_16KB ( 16 * 1024 )
typedef struct MbAuthCode
{
char magic_code[2]; // マジックナンバー
@ -1546,6 +1549,86 @@ BOOL SYSM_IsAuthenticateTitleFinished( void )
return OS_IsThreadTerminated( &s_auth_thread );
}
// アプリ起動に必要なセーブファイルやSharedファイルのリカバリ
static char *s_strResult[] = {
"Target file exists and file size matched.",
"File size didn't match. Changing size succeeded.",
"Target file didn't exist. Creating file and setting size succeeded.",
"ERROR: File Recovery Failed."
};
static void SYSMi_FileRecovery( TitleProperty *pBootTitle )
{
ROM_Header_Short *hs = ( ROM_Header_Short *)SYSM_APP_ROM_HEADER_BUF;
char path[2][ FS_ENTRY_LONGNAME_MAX ];
UTL_RecoveryStatus stat;
// TWL非対応のときは不要なのでreturn
if ( !(hs->platform_code & PLATFORM_CODE_FLAG_TWL) )
{
return;
}
// NANDアプリのときだけ
if ( pBootTitle->flags.bootType == LAUNCHER_BOOTTYPE_NAND )
{
// get savedata_path
s32 result = NAM_GetTitleSaveFilePath( path[ 0 ], path[ 1 ], hs->titleID );
// pub_save
if( result == NAM_OK && hs->public_save_data_size != 0 )
{
stat = UTL_RecoveryFile( path[0], hs->public_save_data_size );
OS_TPrintf("pub_save recovery result : %s \n", s_strResult[stat]);
}
// prv_save
if( result == NAM_OK && hs->private_save_data_size != 0 )
{
stat = UTL_RecoveryFile( path[1], hs->private_save_data_size );
OS_TPrintf("prv_save recovery result : %s \n", s_strResult[stat]);
}
// sub_banner
if( hs->exFlags.availableSubBannerFile && NAM_GetTitleBannerFilePath( path[0], hs->titleID ) == NAM_OK )
{
stat = UTL_RecoveryFile( path[0], SIZE_16KB );
OS_TPrintf("sub_banner recovery result : %s \n", s_strResult[stat]);
}
}
// shared2 (size+1) * 16kb
if( hs->shared2_file0_size != 0 )
{
stat = UTL_RecoveryFile( "nand:/shared2/0000", (u32)( hs->shared2_file0_size + 1 ) * SIZE_16KB );
OS_TPrintf("shared2_0 recovery result : %s \n", s_strResult[stat]);
}
if( hs->shared2_file1_size != 0 )
{
stat = UTL_RecoveryFile( "nand:/shared2/0001", (u32)( hs->shared2_file1_size + 1 ) * SIZE_16KB );
OS_TPrintf("shared2_1 recovery result : %s \n", s_strResult[stat]);
}
if( hs->shared2_file2_size != 0 )
{
stat = UTL_RecoveryFile( "nand:/shared2/0002", (u32)( hs->shared2_file2_size + 1 ) * SIZE_16KB );
OS_TPrintf("shared2_2 recovery result : %s \n", s_strResult[stat]);
}
if( hs->shared2_file3_size != 0 )
{
stat = UTL_RecoveryFile( "nand:/shared2/0003", (u32)( hs->shared2_file3_size + 1 ) * SIZE_16KB );
OS_TPrintf("shared2_3 recovery result : %s \n", s_strResult[stat]);
}
if( hs->shared2_file4_size != 0 )
{
stat = UTL_RecoveryFile( "nand:/shared2/0004", (u32)( hs->shared2_file4_size + 1 ) * SIZE_16KB );
OS_TPrintf("shared2_4 recovery result : %s \n", s_strResult[stat]);
}
if( hs->shared2_file5_size != 0 )
{
stat = UTL_RecoveryFile( "nand:/shared2/0005", (u32)( hs->shared2_file5_size + 1 ) * SIZE_16KB );
OS_TPrintf("shared2_5 recovery result : %s \n", s_strResult[stat]);
}
}
// ロード済みの指定タイトルの認証とブートを行う
// SYSM_GetNandTitleListまたはSYSM_GetNandTitleListMakerInfoのどちらかをSYSM_TryToBootTitle前に呼ぶ必要あり
void SYSM_TryToBootTitle( TitleProperty *pBootTitle )
@ -1583,6 +1666,9 @@ void SYSM_TryToBootTitle( TitleProperty *pBootTitle )
// ブート種別仮セット
SYSMi_GetWork()->appBootType = s_launcherToOSBootType[ pBootTitle->flags.bootType ];
// ブート時ファイルリカバリ処理
SYSMi_FileRecovery( pBootTitle );
// タイトルIDリストの作成
SYSMi_makeTitleIdList();

View File

@ -66,9 +66,9 @@
// フェードアウト関係
#define FADE_COUNT_PER_ALPHA ((FADE_COUNT_MAX - FADE_START) / ALPHA_MAX)
#define FADE_COUNT_MAX 124
#define FADE_COUNT_MAX 62
#define ALPHA_MAX 31
#define FADE_START 62
#define FADE_START 31
// extern data------------------------------------------
@ -351,7 +351,7 @@ static void BannerDraw(int selected, TitleProperty *titleprop)
}
if(fadecount < (FADE_COUNT_MAX - FADE_START)) {
fadecount += 2;
fadecount += 1;
G2_ChangeBlendAlpha( ALPHA_MAX-((fadecount)/FADE_COUNT_PER_ALPHA), (fadecount)/FADE_COUNT_PER_ALPHA );
}
}
@ -425,14 +425,20 @@ BOOL LauncherFadeout( TitleProperty *pTitleList )
{
MtxFx22 mtx;
static double wa;
double s = cos(wa*3);
if( s!=0 ) mtx._00 = (fx32)((s_selected_banner_size/s) * (1.0 + wa));
else mtx._00 = 0x8fff;
mtx._01 = 0;
mtx._10 = 0;
mtx._11 = (fx32)(s_selected_banner_size * (1.0 + wa));
double s = sin(wa*2.2);
double c = cos(wa*2.2);
mtx._00 = (fx32)((s_selected_banner_size*c) * (1.0 + wa));
mtx._01 = (fx32)((s_selected_banner_size*s) * (1.0 + wa));
mtx._10 = (fx32)((s_selected_banner_size*-s) * (1.0 + wa));
mtx._11 = (fx32)((s_selected_banner_size*c) * (1.0 + wa));
//if( c!=0 ) mtx._00 = (fx32)((s_selected_banner_size/c) * (1.0 + wa));
//else mtx._00 = 0x8fff;
//mtx._01 = 0;
//mtx._10 = 0;
//mtx._11 = (fx32)(s_selected_banner_size * (1.0 + wa));
G2_SetOBJAffine((GXOamAffine *)(&banner_oam_attr[0]), &mtx);
wa += 0.0333333333333;
wa += 0.1;
}
// OAMをVRAMへロード