mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
ESによってtmpフォルダがクリアされるので、暫定対応。
・SDK4397以降のlauncherParam.hヘッダが必要 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@759 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
3e2878f456
commit
914441f42d
@ -133,7 +133,7 @@ static void SYSMi_SetBootSRLPath( LauncherBootType bootType, NAMTitleId titleID
|
||||
}
|
||||
break;
|
||||
case LAUNCHER_BOOTTYPE_TEMP:
|
||||
STD_TSNPrintf( path, 31, "nand:/tmp/%.16llx.srl", titleID );
|
||||
STD_TSNPrintf( path, FS_ENTRY_LONGNAME_MAX, OS_TMP_APP_PATH, titleID );
|
||||
break;
|
||||
default:
|
||||
path[ 0 ] = 0;
|
||||
|
||||
@ -24,7 +24,8 @@
|
||||
// define data-----------------------------------------------------------------
|
||||
#define CARD_BANNER_INDEX ( LAUNCHER_TITLE_LIST_NUM - 1 )
|
||||
|
||||
#define SYSTEM_APP_KEY_OFFSET 1 // ファームから送られてくるキーのためのオフセット
|
||||
#define SYSTEM_APP_KEY_OFFSET 1 // ファームから送られてくるSYSTEMアプリキーのためのオフセット
|
||||
#define LAUNCHER_KEY_OFFSET 0 // ファームから送られてくるLauncherキーのためのオフセット
|
||||
#define ROM_HEADER_HASH_OFFSET (0x10) // 署名からROMヘッダハッシュを取り出すためのオフセット
|
||||
|
||||
#define SIGN_HEAP_ADDR 0x023c0000 // 署名計算のためのヒープ領域開始アドレス
|
||||
@ -382,13 +383,14 @@ static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle )
|
||||
break;
|
||||
case LAUNCHER_BOOTTYPE_TEMP:
|
||||
// tmpフォルダ
|
||||
STD_TSNPrintf( path, 31, "nand:/tmp/%.16llx.srl", pBootTitle->titleID );
|
||||
STD_TSNPrintf( path, 256, OS_TMP_APP_PATH, pBootTitle->titleID );
|
||||
break;
|
||||
default:
|
||||
// unknown
|
||||
return;
|
||||
}
|
||||
|
||||
FS_InitFile( file );
|
||||
bSuccess = FS_OpenFileEx(file, path, FS_FILEMODE_R);
|
||||
|
||||
if( ! bSuccess )
|
||||
@ -699,17 +701,39 @@ static AuthResult SYSMi_AuthenticateTWLHeader( TitleProperty *pBootTitle )
|
||||
|
||||
prev = OS_GetTick();
|
||||
prop = ((u16 *)&(pBootTitle->titleID))[2];
|
||||
prop = (u16)(prop & 0x1); // prop = 0:UserApp 1:SystemApp 2:ShopApp?
|
||||
prop = (u16)(prop & 0x3); // prop = 0:UserApp 1:SystemApp 2:ShopApp?
|
||||
keynum = (u8)( prop == 0 ? 2 : (prop == 1 ? 0 : 1) );// keynum = 0:SystemApp 1:ShopApp 2:UserApp
|
||||
// アプリ種別とボンディングオプションによって使う鍵を分ける
|
||||
if( SCFG_GetBondingOption() == 0 ) {
|
||||
// #define LNC_PDTKEY_DBG
|
||||
#ifdef LNC_PDTKEY_DBG
|
||||
{
|
||||
// 製品版鍵デバグ用コード
|
||||
u8 *gamecode = (u8 *)&(pBootTitle->titleID);
|
||||
// 製品版鍵取得
|
||||
key = ((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->rsa_pubkey[SYSTEM_APP_KEY_OFFSET + keynum];
|
||||
b_dev = TRUE; // 開発版のスルーフラグ
|
||||
// 製品版のLauncherは専用の鍵を使う。開発版は今のところSystemAppの鍵で代用
|
||||
if( gamecode[3] == 'L' && gamecode[2] == 'N' && gamecode[1] == 'C' )
|
||||
{
|
||||
key = ((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->rsa_pubkey[LAUNCHER_KEY_OFFSET];
|
||||
}
|
||||
}
|
||||
#else
|
||||
if( SCFG_GetBondingOption() == 0 ) {
|
||||
u8 *gamecode = (u8 *)&(pBootTitle->titleID);
|
||||
// 製品版鍵取得
|
||||
key = ((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->rsa_pubkey[SYSTEM_APP_KEY_OFFSET + keynum];
|
||||
// 製品版のLauncherは専用の鍵を使う。開発版は今のところSystemAppの鍵で代用
|
||||
if( gamecode[3] == 'L' && gamecode[2] == 'N' && gamecode[1] == 'C' )
|
||||
{
|
||||
key = ((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->rsa_pubkey[LAUNCHER_KEY_OFFSET];
|
||||
}
|
||||
}else {
|
||||
// 開発版
|
||||
key = g_devPubKey[keynum];
|
||||
b_dev = TRUE;
|
||||
}
|
||||
#endif
|
||||
// 署名を鍵で復号
|
||||
MI_CpuClear8( buf, 0x80 );
|
||||
SVC_InitSignHeap( &con, (void *)SIGN_HEAP_ADDR, SIGN_HEAP_SIZE );// ヒープの初期化
|
||||
|
||||
@ -741,13 +741,57 @@ static void DrawScrollBar( TitleProperty *pTitleList )
|
||||
TitleProperty *LauncherMain( TitleProperty *pTitleList )
|
||||
{
|
||||
TitleProperty *ret = NULL;
|
||||
|
||||
|
||||
//#define DBGLP
|
||||
#ifdef DBGLP
|
||||
typedef struct NandFirmResetParameter {
|
||||
u8 isHotStart :1;
|
||||
u8 isResetSW :1;
|
||||
u8 rsv :5;
|
||||
u8 isValid :1;
|
||||
}NandFirmResetParameter;
|
||||
{
|
||||
static BOOL a=FALSE;
|
||||
if( pad.cont & PAD_BUTTON_Y )
|
||||
{
|
||||
u8 *p = (u8 *)SYSMi_GetLauncherParamAddr();
|
||||
int l;
|
||||
if( a )
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL );
|
||||
for(l=0;l<16;l++)
|
||||
PrintfSJIS( 0, l*12, TXT_COLOR_RED, "%.02x%.02x%.02x%.02x %.02x%.02x%.02x%.02x",
|
||||
*(p+l*8), *(p+1+l*8), *(p+2+l*8), *(p+3+l*8), *(p+4+l*8), *(p+5+l*8), *(p+6+l*8), *(p+7+l*8) );
|
||||
a=TRUE;
|
||||
return ret;
|
||||
}
|
||||
if( a ){
|
||||
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_NULL );
|
||||
a=FALSE;
|
||||
}
|
||||
}
|
||||
PrintfSJIS( 1, 12, TXT_COLOR_RED,
|
||||
"ValidLParam:%d\n", SYSMi_GetWork()->flags.common.isValidLauncherParam );
|
||||
#define OSi_GetNandFirmResetParam() ( (NandFirmResetParameter *)HW_NAND_FIRM_HOTSTART_FLAG )
|
||||
PrintfSJIS( 1, 24, TXT_COLOR_RED,
|
||||
"HotStartFlag:%d\n", OSi_GetNandFirmResetParam()->isHotStart );
|
||||
PrintfSJIS( 1, 36, TXT_COLOR_RED,
|
||||
"ResetSWFlag:%d\n", OSi_GetNandFirmResetParam()->isResetSW );
|
||||
PrintfSJIS( 1, 48, TXT_COLOR_RED,
|
||||
"LParamCRC16:%.04x\n", SVC_GetCRC16( 65535, &SYSMi_GetLauncherParamAddr()->body, SYSMi_GetLauncherParamAddr()->header.bodyLength ) );
|
||||
PrintfSJIS( 1, 60, TXT_COLOR_RED,
|
||||
"NandFirmResetParam:%.01x\n", *(u8 *)(OSi_GetNandFirmResetParam()) );
|
||||
PrintfSJIS( 1, 72, TXT_COLOR_RED,
|
||||
"McuVersion:%d\n", SYSMi_GetMcuVersion() );
|
||||
#endif
|
||||
|
||||
// キー及びタッチ制御
|
||||
ret = ProcessPads( pTitleList );
|
||||
MoveByScrollBar();
|
||||
|
||||
// 描画関係
|
||||
|
||||
PollBackLightBrightness();
|
||||
|
||||
DrawScrollBar( pTitleList );
|
||||
|
||||
@ -308,34 +308,18 @@ static void INTR_VBlank(void)
|
||||
// nandのtmpディレクトリの中身を消す
|
||||
static void deleteTmp()
|
||||
{
|
||||
FSFile dir;
|
||||
FSDirectoryEntryInfo info;
|
||||
FS_InitFile(&dir);
|
||||
if(!FS_OpenDirectory(&dir, "nand:/tmp", FS_FILEMODE_R | FS_FILEMODE_W))
|
||||
{
|
||||
OS_TPrintf( "ERROR deleteTmp: open nand:/tmp failed!\n" );
|
||||
return;
|
||||
}
|
||||
while(FS_ReadDirectory(&dir, &info))
|
||||
{
|
||||
if(info.attributes & FS_ATTRIBUTE_IS_DIRECTORY)
|
||||
{
|
||||
//ディレクトリは今のところ削除しない
|
||||
}else
|
||||
{
|
||||
//ファイルは今のところsrlのみ削除
|
||||
char buf[512];
|
||||
u32 end = info.longname_length;
|
||||
if( (info.longname[end-1]=='l' || info.longname[end-1]=='L') &&
|
||||
(info.longname[end-2]=='r' || info.longname[end-2]=='R') &&
|
||||
(info.longname[end-3]=='s' || info.longname[end-3]=='S') &&
|
||||
(info.longname[end-4]=='.') )
|
||||
{
|
||||
STD_TSNPrintf( buf, 512, "nand:/tmp/%s",info.longname);
|
||||
FS_DeleteFile( buf );
|
||||
OS_TPrintf( "deleteTmp: deleted File '%s' \n", buf );
|
||||
}
|
||||
}
|
||||
}
|
||||
FS_CloseDirectory(&dir);
|
||||
if( FS_DeleteFile( OS_TMP_APP_PATH ) )
|
||||
{
|
||||
OS_TPrintf( "deleteTmp: deleted File '%s' \n", OS_TMP_APP_PATH );
|
||||
}else
|
||||
{
|
||||
FSResult res = FS_GetArchiveResultCode("nand");
|
||||
if( FS_RESULT_SUCCESS == res )
|
||||
{
|
||||
OS_TPrintf( "deleteTmp: File '%s' not exists.\n", OS_TMP_APP_PATH );
|
||||
}else
|
||||
{
|
||||
OS_TPrintf( "deleteTmp: delete File '%s' failed. Error code = %d.\n", OS_TMP_APP_PATH, res );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user