mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
アプリ起動処理にセーブファイルなどのリカバリ処理を追加
ランチャーのアプリ起動時フェードアウト時間が長すぎたので短縮(約2秒->約1秒) git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1868 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
b1285facd1
commit
34a35c476c
@ -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();
|
||||
|
||||
|
||||
@ -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へロード
|
||||
|
||||
Loading…
Reference in New Issue
Block a user