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/format/from_firm.h>
|
||||||
#include <firm/hw/ARM9/mmap_firm.h>
|
#include <firm/hw/ARM9/mmap_firm.h>
|
||||||
#include <sysmenu/util_menuAppManager.h>
|
#include <sysmenu/util_menuAppManager.h>
|
||||||
|
#include <sysmenu/util_recoveryFile.h>
|
||||||
#include "internal_api.h"
|
#include "internal_api.h"
|
||||||
#include "fs_wram.h"
|
#include "fs_wram.h"
|
||||||
|
|
||||||
@ -61,6 +62,8 @@
|
|||||||
|
|
||||||
#define SYSM_TITLE_MESSAGE_ARRAY_MAX 1
|
#define SYSM_TITLE_MESSAGE_ARRAY_MAX 1
|
||||||
|
|
||||||
|
#define SIZE_16KB ( 16 * 1024 )
|
||||||
|
|
||||||
typedef struct MbAuthCode
|
typedef struct MbAuthCode
|
||||||
{
|
{
|
||||||
char magic_code[2]; // マジックナンバー
|
char magic_code[2]; // マジックナンバー
|
||||||
@ -1546,6 +1549,86 @@ BOOL SYSM_IsAuthenticateTitleFinished( void )
|
|||||||
return OS_IsThreadTerminated( &s_auth_thread );
|
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前に呼ぶ必要あり
|
// SYSM_GetNandTitleListまたはSYSM_GetNandTitleListMakerInfoのどちらかをSYSM_TryToBootTitle前に呼ぶ必要あり
|
||||||
void SYSM_TryToBootTitle( TitleProperty *pBootTitle )
|
void SYSM_TryToBootTitle( TitleProperty *pBootTitle )
|
||||||
@ -1583,6 +1666,9 @@ void SYSM_TryToBootTitle( TitleProperty *pBootTitle )
|
|||||||
// ブート種別仮セット
|
// ブート種別仮セット
|
||||||
SYSMi_GetWork()->appBootType = s_launcherToOSBootType[ pBootTitle->flags.bootType ];
|
SYSMi_GetWork()->appBootType = s_launcherToOSBootType[ pBootTitle->flags.bootType ];
|
||||||
|
|
||||||
|
// ブート時ファイルリカバリ処理
|
||||||
|
SYSMi_FileRecovery( pBootTitle );
|
||||||
|
|
||||||
// タイトルIDリストの作成
|
// タイトルIDリストの作成
|
||||||
SYSMi_makeTitleIdList();
|
SYSMi_makeTitleIdList();
|
||||||
|
|
||||||
|
|||||||
@ -66,9 +66,9 @@
|
|||||||
|
|
||||||
// フェードアウト関係
|
// フェードアウト関係
|
||||||
#define FADE_COUNT_PER_ALPHA ((FADE_COUNT_MAX - FADE_START) / ALPHA_MAX)
|
#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 ALPHA_MAX 31
|
||||||
#define FADE_START 62
|
#define FADE_START 31
|
||||||
|
|
||||||
// extern data------------------------------------------
|
// extern data------------------------------------------
|
||||||
|
|
||||||
@ -351,7 +351,7 @@ static void BannerDraw(int selected, TitleProperty *titleprop)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(fadecount < (FADE_COUNT_MAX - FADE_START)) {
|
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 );
|
G2_ChangeBlendAlpha( ALPHA_MAX-((fadecount)/FADE_COUNT_PER_ALPHA), (fadecount)/FADE_COUNT_PER_ALPHA );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -425,14 +425,20 @@ BOOL LauncherFadeout( TitleProperty *pTitleList )
|
|||||||
{
|
{
|
||||||
MtxFx22 mtx;
|
MtxFx22 mtx;
|
||||||
static double wa;
|
static double wa;
|
||||||
double s = cos(wa*3);
|
double s = sin(wa*2.2);
|
||||||
if( s!=0 ) mtx._00 = (fx32)((s_selected_banner_size/s) * (1.0 + wa));
|
double c = cos(wa*2.2);
|
||||||
else mtx._00 = 0x8fff;
|
mtx._00 = (fx32)((s_selected_banner_size*c) * (1.0 + wa));
|
||||||
mtx._01 = 0;
|
mtx._01 = (fx32)((s_selected_banner_size*s) * (1.0 + wa));
|
||||||
mtx._10 = 0;
|
mtx._10 = (fx32)((s_selected_banner_size*-s) * (1.0 + wa));
|
||||||
mtx._11 = (fx32)(s_selected_banner_size * (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);
|
G2_SetOBJAffine((GXOamAffine *)(&banner_oam_attr[0]), &mtx);
|
||||||
wa += 0.0333333333333;
|
wa += 0.1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// OAMをVRAMへロード
|
// OAMをVRAMへロード
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user