mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
・アプリへ引き渡すタイトルリストの作成処理手順を変更。romヘッダ情報読み込み処理をバナー読み込み処理に組み込み。
・スクロールバーの操作感変更。 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1616 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
22e68de023
commit
748c81ca26
@ -65,7 +65,7 @@ BOOL BANNER_ReadBannerFromCARD( u32 bannerOffset, TWLBannerFile *pBanner )
|
||||
|
||||
|
||||
// NANDアプリバナーリード
|
||||
BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst )
|
||||
BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst, TitleListMakerInfo *pTitleListMakerInfo )
|
||||
{
|
||||
#define PATH_LENGTH 1024
|
||||
|
||||
@ -77,7 +77,8 @@ BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst )
|
||||
BOOL bSuccess;
|
||||
char path[PATH_LENGTH];
|
||||
s32 readLen;
|
||||
s32 offset;
|
||||
u32 offset;
|
||||
ROM_Header_Short hs;
|
||||
|
||||
FS_InitFile(file);
|
||||
|
||||
@ -113,31 +114,19 @@ BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst )
|
||||
OS_TPrintf( "OpenFileEX : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
|
||||
start = OS_GetTick();
|
||||
#endif
|
||||
|
||||
// ROMヘッダのバナーデータオフセットを読み込む
|
||||
bSuccess = FS_SeekFile(file, 0x68, FS_SEEK_SET);
|
||||
if( ! bSuccess )
|
||||
{
|
||||
OS_TPrintf("BANNER_GetNandTitleList failed: cant seek file(0)\n");
|
||||
FS_CloseFile(file);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#if (MEASURE_BANNER_LOAD_TIME == 1)
|
||||
OS_TPrintf( "FS_SeekFile offset: %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
|
||||
start = OS_GetTick();
|
||||
#endif
|
||||
|
||||
readLen = FS_ReadFile(file, &offset, sizeof(offset));
|
||||
if( readLen != sizeof(offset) )
|
||||
readLen = FS_ReadFile(file, &hs, sizeof(hs));
|
||||
if( readLen != sizeof(hs) )
|
||||
{
|
||||
OS_TPrintf("BANNER_GetNandTitleList failed: cant read file\n");
|
||||
FS_CloseFile(file);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
offset = hs.banner_offset;
|
||||
|
||||
#if (MEASURE_BANNER_LOAD_TIME == 1)
|
||||
OS_TPrintf( "FS_ReadFile offset : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
|
||||
OS_TPrintf( "FS_ReadFile header : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
|
||||
#endif
|
||||
|
||||
// バナーが存在する場合のみリード
|
||||
@ -147,7 +136,7 @@ BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst )
|
||||
start = OS_GetTick();
|
||||
#endif
|
||||
|
||||
bSuccess = FS_SeekFile(file, offset, FS_SEEK_SET);
|
||||
bSuccess = FS_SeekFile(file, (s32)offset, FS_SEEK_SET);
|
||||
if( ! bSuccess )
|
||||
{
|
||||
OS_TPrintf("BANNER_GetNandTitleList failed: cant seek file(offset)\n");
|
||||
@ -237,6 +226,12 @@ BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst )
|
||||
|
||||
}
|
||||
|
||||
// タイトルリスト用情報の生成
|
||||
if(!SYSM_MakeTitleListMakerInfoFromHeader( pTitleListMakerInfo, &hs ))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@ -103,6 +103,7 @@ static BOOL s_loadForcibly = FALSE;
|
||||
static OSMessageQueue s_msgQ;
|
||||
static OSMessage s_msgArray[SYSM_TITLE_MESSAGE_ARRAY_MAX];
|
||||
|
||||
static TitleListMakerInfo *s_pTitleListMakerInfo = NULL;
|
||||
static NAMTitleId *s_pTitleIDList = NULL;
|
||||
static int s_listLength = 0;
|
||||
|
||||
@ -370,7 +371,8 @@ BOOL SYSM_InitNandTitleList( void )
|
||||
s_listLength = NAM_GetNumTitles();
|
||||
OS_TPrintf( "NAM_GetNumTitles : %dus\n", OS_TicksToMicroSeconds( OS_GetTick() - start ) );
|
||||
s_pTitleIDList = SYSM_Alloc( sizeof(NAMTitleId) * s_listLength );
|
||||
if( s_pTitleIDList == NULL ) {
|
||||
s_pTitleListMakerInfo = SYSM_Alloc( sizeof(TitleListMakerInfo) * s_listLength );
|
||||
if( s_pTitleIDList == NULL || s_pTitleListMakerInfo == NULL ) {
|
||||
OS_TPrintf( "%s: alloc error.\n", __FUNCTION__ );
|
||||
return FALSE;
|
||||
}
|
||||
@ -384,11 +386,80 @@ BOOL SYSM_InitNandTitleList( void )
|
||||
// NANDアプリリストの解放
|
||||
void SYSM_FreeNandTitleList( void )
|
||||
{
|
||||
if(s_pTitleIDList != NULL)
|
||||
if( s_pTitleIDList != NULL)
|
||||
{
|
||||
SYSM_Free( s_pTitleIDList );
|
||||
s_pTitleIDList = NULL;
|
||||
}
|
||||
if(s_pTitleListMakerInfo != NULL )
|
||||
{
|
||||
SYSM_Free( s_pTitleListMakerInfo );
|
||||
s_pTitleListMakerInfo = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static BOOL MakeTitleListMakerInfoFromTitleID( TitleListMakerInfo *info, OSTitleId titleID )
|
||||
{
|
||||
ROM_Header_Short e_hs;
|
||||
FSFile file[1];
|
||||
char path[256];
|
||||
BOOL bSuccess;
|
||||
s32 readLen;
|
||||
#if (MEASURE_MAKELIST_TIME == 1)
|
||||
OSTick prev;
|
||||
#endif
|
||||
|
||||
// 無効なTitleID または、DataOnlyアプリはスキップ
|
||||
if( (titleID == NULL) || ( titleID & TITLE_ID_DATA_ONLY_FLAG_MASK ) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
// romヘッダ読み込み
|
||||
|
||||
#if (MEASURE_MAKELIST_TIME == 1)
|
||||
// 時間計測1
|
||||
prev = OS_GetTick();
|
||||
#endif
|
||||
|
||||
NAM_GetTitleBootContentPathFast(path, titleID);
|
||||
|
||||
#if (MEASURE_MAKELIST_TIME == 1)
|
||||
OS_TPrintf("SYSMi_makeTitleIdList : NAM_GetTitleBootContentPathFast %dms\n",OS_TicksToMilliSeconds(OS_GetTick() - prev));
|
||||
// end時間計測1
|
||||
|
||||
// 時間計測2
|
||||
prev = OS_GetTick();
|
||||
#endif
|
||||
|
||||
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);
|
||||
return FALSE;
|
||||
}
|
||||
bSuccess = FS_SeekFile(file, 0x00000000, FS_SEEK_SET);
|
||||
if( ! bSuccess )
|
||||
{
|
||||
OS_TPrintf("SYSMi_makeTitleIdList failed: cant seek file(0)\n");
|
||||
FS_CloseFile(file);
|
||||
return FALSE;
|
||||
}
|
||||
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);
|
||||
return FALSE;
|
||||
}
|
||||
FS_CloseFile(file);
|
||||
// end時間計測2
|
||||
#if (MEASURE_MAKELIST_TIME == 1)
|
||||
OS_TPrintf("SYSMi_makeTitleIdList : read header. %dms\n",OS_TicksToMilliSeconds(OS_GetTick() - prev));
|
||||
#endif
|
||||
|
||||
return SYSM_MakeTitleListMakerInfoFromHeader( info, &e_hs);
|
||||
}
|
||||
|
||||
// ローンチ対象となるNANDタイトルリストの取得
|
||||
@ -403,21 +474,29 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum )
|
||||
int validNum = 0;
|
||||
NAMTitleId titleIDArray[ LAUNCHER_TITLE_LIST_NUM - 1 ];// ローンチ可能なタイトルリストの一時置き場
|
||||
|
||||
if( s_pTitleIDList == NULL ) return -1;
|
||||
if( s_pTitleIDList == NULL || s_pTitleListMakerInfo == NULL ) return -1;
|
||||
|
||||
// 取得したタイトルがローンチ対象かどうかをチェック
|
||||
for( l = 0; l < s_listLength; l++ ) {
|
||||
// "Not Launch"でない かつ "Data Only"でない なら有効なタイトルとしてリストに追加
|
||||
if( ( s_pTitleIDList[ l ] & ( TITLE_ID_NOT_LAUNCH_FLAG_MASK | TITLE_ID_DATA_ONLY_FLAG_MASK ) ) == 0 ) {
|
||||
titleIDArray[ validNum ] = s_pTitleIDList[ l ];
|
||||
BANNER_ReadBannerFromNAND( s_pTitleIDList[ l ], &s_bannerBuf[ validNum ] );
|
||||
BANNER_ReadBannerFromNAND( s_pTitleIDList[ l ], &s_bannerBuf[ validNum ], &s_pTitleListMakerInfo[l] );
|
||||
validNum++;
|
||||
if( !( validNum < LAUNCHER_TITLE_LIST_NUM - 1 ) )// 最大(LAUNCHER_TITLE_LIST_NUM - 1)まで
|
||||
{
|
||||
break;
|
||||
}
|
||||
}else
|
||||
{
|
||||
MakeTitleListMakerInfoFromTitleID( &s_pTitleListMakerInfo[l], s_pTitleIDList[ l ] );
|
||||
}
|
||||
}
|
||||
// 画面に表示できる以上のNANDタイトルが存在する場合、それらについてタイトルリスト作成用情報を生成
|
||||
for( ; l<s_listLength; l++ )
|
||||
{
|
||||
MakeTitleListMakerInfoFromTitleID( &s_pTitleListMakerInfo[l], s_pTitleIDList[ l ] );
|
||||
}
|
||||
|
||||
// 念のため残り領域を0クリア
|
||||
for( l = validNum; l < LAUNCHER_TITLE_LIST_NUM - 1; l++ ) {
|
||||
@ -1624,20 +1703,16 @@ static void SYSMi_makeTitleIdList( void )
|
||||
{
|
||||
// [TODO:]現在ブート不可タイトルについても入れるようにしているが
|
||||
// これで良いのか?
|
||||
// カード以外はもっと早いタイミングで作れるのでは?->高速化
|
||||
OSTitleIDList *list = ( OSTitleIDList * )HW_OS_TITLE_ID_LIST;
|
||||
ROM_Header_Short *hs = ( ROM_Header_Short *)SYSM_APP_ROM_HEADER_BUF;
|
||||
int l;
|
||||
u8 count = 0;
|
||||
int max = ( s_listLength < OS_TITLEIDLIST_MAX ) ? s_listLength : OS_TITLEIDLIST_MAX;
|
||||
OSTick start;
|
||||
#if (MEASURE_MAKELIST_TIME == 1)
|
||||
OSTick prev;
|
||||
#endif
|
||||
int max = ( s_listLength < OS_TITLEIDLIST_MAX-1 ) ? s_listLength : OS_TITLEIDLIST_MAX-1;
|
||||
OSTick start;
|
||||
|
||||
// 時間計測総合
|
||||
start = OS_GetTick();
|
||||
if( s_pTitleIDList == NULL )
|
||||
if( s_pTitleIDList == NULL || s_pTitleListMakerInfo == NULL )
|
||||
{
|
||||
OS_TPrintf("SYSMi_makeTitleIdList failed: SYSM_InitNandTitleList() is not called.\n");
|
||||
return;
|
||||
@ -1654,17 +1729,16 @@ static void SYSMi_makeTitleIdList( void )
|
||||
|
||||
for(l=-1;l<max;l++) // -1はカードアプリの特別処理用
|
||||
{
|
||||
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;
|
||||
char *gamecode;
|
||||
TitleListMakerInfo *p_info;
|
||||
TitleListMakerInfo info;
|
||||
OSTitleId id;
|
||||
|
||||
if(l==-1)
|
||||
{
|
||||
ROM_Header_Short *pe_hs;
|
||||
// カードアプリ
|
||||
if(SYSM_IsExistCard())
|
||||
{
|
||||
@ -1673,70 +1747,31 @@ static void SYSMi_makeTitleIdList( void )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
p_info = &info;
|
||||
SYSM_MakeTitleListMakerInfoFromHeader( p_info, pe_hs);
|
||||
id = pe_hs->titleID;
|
||||
}else
|
||||
{
|
||||
// 無効なTitleID または、DataOnlyアプリはスキップ
|
||||
if( (s_pTitleIDList[l] == NULL) || ( s_pTitleIDList[l] & TITLE_ID_DATA_ONLY_FLAG_MASK ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// romヘッダ読み込み
|
||||
|
||||
#if (MEASURE_MAKELIST_TIME == 1)
|
||||
// 時間計測1
|
||||
prev = OS_GetTick();
|
||||
#endif
|
||||
|
||||
NAM_GetTitleBootContentPathFast(path, s_pTitleIDList[l]);
|
||||
|
||||
#if (MEASURE_MAKELIST_TIME == 1)
|
||||
OS_TPrintf("SYSMi_makeTitleIdList : NAM_GetTitleBootContentPathFast %dms\n",OS_TicksToMilliSeconds(OS_GetTick() - prev));
|
||||
// end時間計測1
|
||||
|
||||
// 時間計測2
|
||||
prev = OS_GetTick();
|
||||
#endif
|
||||
|
||||
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;
|
||||
// end時間計測2
|
||||
#if (MEASURE_MAKELIST_TIME == 1)
|
||||
OS_TPrintf("SYSMi_makeTitleIdList : read header. %dms\n",OS_TicksToMilliSeconds(OS_GetTick() - prev));
|
||||
#endif
|
||||
p_info = &s_pTitleListMakerInfo[l];
|
||||
id = s_pTitleIDList[l];
|
||||
}
|
||||
|
||||
for(m=0;m<MAKER_CODE_MAX;m++)
|
||||
{
|
||||
if(hs->maker_code[m] != pe_hs->maker_code[m])
|
||||
if(hs->maker_code[m] != p_info->makerCode[m])
|
||||
{
|
||||
same_maker_code = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// 無効なTitleID または、DataOnlyアプリはスキップ
|
||||
if( (id == NULL) || ( id & TITLE_ID_DATA_ONLY_FLAG_MASK ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// ランチャーはリストに入れない
|
||||
gamecode = (char *)&(pe_hs->titleID);
|
||||
gamecode = (char *)&(id);
|
||||
if( ( 0 == STD_CompareNString( &gamecode[1], "ANH", 3 ) )
|
||||
#ifdef DEV_UIG_LAUNCHER
|
||||
|| ( ( 0 == STD_CompareNString( &gamecode[1], "AN4", 3 ) ) && ( SCFG_GetBondingOption() != 0 ) )
|
||||
@ -1751,18 +1786,18 @@ static void SYSMi_makeTitleIdList( void )
|
||||
( same_maker_code ) )
|
||||
{
|
||||
// セキュアアプリのデータはマウントさせない
|
||||
if( !(pe_hs->titleID & TITLE_ID_SECURE_FLAG_MASK) )
|
||||
if( !(id & TITLE_ID_SECURE_FLAG_MASK) )
|
||||
{
|
||||
// リストに追加
|
||||
list->TitleID[count] = pe_hs->titleID;
|
||||
list->TitleID[count] = id;
|
||||
// sameMakerFlagをON
|
||||
list->sameMakerFlag[count/8] |= (u8)(0x1 << (count%8));
|
||||
// Prv,Pubそれぞれセーブデータがあるか見て、存在すればフラグON
|
||||
if(pe_hs->public_save_data_size != 0)
|
||||
if(p_info->public_save_data_size != 0)
|
||||
{
|
||||
list->publicFlag[count/8] |= (u8)(0x1 << (count%8));
|
||||
}
|
||||
if(pe_hs->private_save_data_size != 0)
|
||||
if(p_info->private_save_data_size != 0)
|
||||
{
|
||||
list->privateFlag[count/8] |= (u8)(0x1 << (count%8));
|
||||
}
|
||||
@ -1770,10 +1805,10 @@ static void SYSMi_makeTitleIdList( void )
|
||||
}
|
||||
|
||||
// ジャンプ可能ならば
|
||||
if( pe_hs->permit_landing_normal_jump )
|
||||
if( p_info->permit_landing_normal_jump )
|
||||
{
|
||||
// リストに追加してジャンプ可能フラグON
|
||||
list->TitleID[count] = pe_hs->titleID;
|
||||
list->TitleID[count] = id;
|
||||
list->appJumpFlag[count/8] |= (u8)(0x1 << (count%8));
|
||||
}
|
||||
|
||||
@ -1788,6 +1823,23 @@ static void SYSMi_makeTitleIdList( void )
|
||||
OS_TPrintf("SYSMi_makeTitleIdList : total %dms\n",OS_TicksToMilliSeconds(OS_GetTick() - start));
|
||||
}
|
||||
|
||||
BOOL SYSM_MakeTitleListMakerInfoFromHeader( TitleListMakerInfo *info, ROM_Header_Short *hs)
|
||||
{
|
||||
int l;
|
||||
if( info == NULL || hs == NULL )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
for(l=0;l<MAKER_CODE_MAX;l++)
|
||||
{
|
||||
info->makerCode[l] = hs->maker_code[l];
|
||||
}
|
||||
info->public_save_data_size = hs->public_save_data_size;
|
||||
info->private_save_data_size = hs->private_save_data_size;
|
||||
info->permit_landing_normal_jump = ( hs->permit_landing_normal_jump ? TRUE : FALSE );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
// 指定タイトルの認証&ロード ※1フレームじゃ終わらん。
|
||||
|
||||
@ -646,16 +646,35 @@ static TitleProperty *ProcessPads( TitleProperty *pTitleList )
|
||||
// スクロールバーによるスクロール
|
||||
static void MoveByScrollBar( void )
|
||||
{
|
||||
static double vx = 0;
|
||||
|
||||
// スクロールバーによるスクロール
|
||||
{
|
||||
static BOOL holding = FALSE;
|
||||
static int dx;
|
||||
static const int list_len = 4;
|
||||
static int list_x[list_len];
|
||||
int l;
|
||||
|
||||
if(!holding)
|
||||
if(!holding && vx == 0)
|
||||
{
|
||||
bar_left = (int)(BAR_ZERO_X + (ITEMDOT_PER_FRAME * s_csr));
|
||||
}
|
||||
|
||||
// 慣性移動
|
||||
if(vx!=0)
|
||||
{
|
||||
bar_left += (int)vx;
|
||||
s_csr = (u16)((bar_left - BAR_ZERO_X) * FRAME_PER_ITEMDOT);
|
||||
vx = vx * 0.9;
|
||||
if(vx*vx < 1)
|
||||
{
|
||||
int det = s_csr % FRAME_PER_SELECT;
|
||||
csr_v = (det == 0 ? 0 : (vx>0 ? 1 : -1) );
|
||||
vx = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if(tpd.disp.touch)
|
||||
{
|
||||
if(holding)
|
||||
@ -669,11 +688,23 @@ static void MoveByScrollBar( void )
|
||||
bar_left = tpd.disp.x - dx - BAR_LOOSENESS;
|
||||
}
|
||||
s_csr = (u16)((bar_left - BAR_ZERO_X) * FRAME_PER_ITEMDOT);
|
||||
|
||||
// 移動履歴追記
|
||||
for( l=0; l<list_len-1; l++ )
|
||||
{
|
||||
list_x[l] = list_x[l+1];
|
||||
}
|
||||
list_x[list_len-1] = tpd.disp.x;
|
||||
}
|
||||
else if(WithinRangeTP(bar_left+5-BAR_WIDTH/2, BAR_ZERO_Y+BAR_OFFSET,bar_left+5+BAR_WIDTH/2,BAR_ZERO_Y+BAR_OFFSET+BAR_HEIGHT,&tpd.disp))
|
||||
{
|
||||
holding = TRUE;
|
||||
dx = tpd.disp.x - bar_left;
|
||||
// 移動履歴初期化
|
||||
for( l=0; l<list_len; l++ )
|
||||
{
|
||||
list_x[l] = tpd.disp.x;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -682,15 +713,37 @@ static void MoveByScrollBar( void )
|
||||
{
|
||||
int det = s_csr % FRAME_PER_SELECT;
|
||||
holding = FALSE;
|
||||
csr_v = (det < FRAME_PER_SELECT/2) ? (det == 0 ? 0 : -1) : 1;
|
||||
|
||||
// 移動履歴から速度算出
|
||||
for( l=1; l<list_len; l++ )
|
||||
{
|
||||
int ax = list_x[l] - list_x[l-1];
|
||||
vx += (double)ax;
|
||||
if(l == list_len-1 && ax == 0)
|
||||
{
|
||||
vx = 0;
|
||||
}
|
||||
}
|
||||
vx /= (list_len-1);
|
||||
if(vx == 0)
|
||||
{
|
||||
csr_v = (det < FRAME_PER_SELECT/2) ? (det == 0 ? 0 : -1) : 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// タッチパッドによるスクロール後の調整
|
||||
if( BAR_ZERO_X + (ITEM_SIZE + ITEM_INTERVAL) * (LAUNCHER_TITLE_LIST_NUM - 1) < bar_left )
|
||||
{
|
||||
bar_left = BAR_ZERO_X + (ITEM_SIZE + ITEM_INTERVAL) * (LAUNCHER_TITLE_LIST_NUM - 1);
|
||||
if( bar_left < BAR_ZERO_X ) bar_left = BAR_ZERO_X;
|
||||
vx = -vx;
|
||||
}
|
||||
if( bar_left < BAR_ZERO_X )
|
||||
{
|
||||
bar_left = BAR_ZERO_X;
|
||||
vx = -vx;
|
||||
}
|
||||
if((LAUNCHER_TITLE_LIST_NUM-1)*FRAME_PER_SELECT < s_csr) s_csr = (LAUNCHER_TITLE_LIST_NUM-1)*FRAME_PER_SELECT;
|
||||
if( s_csr < 0 ) s_csr = 0;
|
||||
}
|
||||
|
||||
@ -20,6 +20,7 @@
|
||||
|
||||
#include <twl/types.h>
|
||||
#include <twl/os/common/banner.h>
|
||||
#include <sysmenu.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@ -35,7 +36,7 @@ extern "C" {
|
||||
BOOL BANNER_ReadBannerFromCARD( u32 bannerOffset, TWLBannerFile *pDst );
|
||||
|
||||
// NANDからのバナーリード
|
||||
BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst );
|
||||
BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst, TitleListMakerInfo *pTitleListMakerInfo );
|
||||
|
||||
// バナーのフォーマットが正しいかチェック(NTRバナー、TWLバナーのどちらでもOK)
|
||||
BOOL BANNER_CheckBanner( TWLBannerFile *pBanner );
|
||||
|
||||
@ -57,6 +57,14 @@ typedef struct TitleProperty { //
|
||||
TWLBannerFile *pBanner; // バナーへのポインタ(固定長フォーマットなら偽造されても大丈夫だろう。)
|
||||
}TitleProperty;
|
||||
|
||||
// タイトルリスト作成用情報構造体
|
||||
typedef struct TitleListMakerInfo {
|
||||
char makerCode[MAKER_CODE_MAX];
|
||||
u32 public_save_data_size;
|
||||
u32 private_save_data_size;
|
||||
BOOL permit_landing_normal_jump;
|
||||
}TitleListMakerInfo;
|
||||
|
||||
// アプリ認証結果
|
||||
typedef enum AuthResult {
|
||||
AUTH_RESULT_SUCCEEDED = 0,
|
||||
@ -142,6 +150,9 @@ extern s32 SYSMi_getCheckTitleLaunchRightsResult( void ); // CheckTitleLaun
|
||||
extern BOOL SYSM_IsLoadTitlePaused(void); // ローディングスレッドが一時停止しているか?
|
||||
extern void SYSM_ResumeLoadingThread( BOOL force ); // ローディングスレッドが一時停止していたら再開
|
||||
|
||||
extern BOOL SYSM_MakeTitleListMakerInfoFromHeader( TitleListMakerInfo *info, ROM_Header_Short *hs);
|
||||
// タイトルリスト作成用情報をヘッダ情報から作成
|
||||
|
||||
#endif
|
||||
|
||||
// 状態チェック
|
||||
|
||||
Loading…
Reference in New Issue
Block a user