From 914441f42d139c4975c1decd04bd92024de00ecc Mon Sep 17 00:00:00 2001 From: yoshida_teruhisa Date: Thu, 28 Feb 2008 04:47:34 +0000 Subject: [PATCH] =?UTF-8?q?ES=E3=81=AB=E3=82=88=E3=81=A3=E3=81=A6tmp?= =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80=E3=81=8C=E3=82=AF=E3=83=AA?= =?UTF-8?q?=E3=82=A2=E3=81=95=E3=82=8C=E3=82=8B=E3=81=AE=E3=81=A7=E3=80=81?= =?UTF-8?q?=E6=9A=AB=E5=AE=9A=E5=AF=BE=E5=BF=9C=E3=80=82=20=20=E3=83=BBSDK?= =?UTF-8?q?4397=E4=BB=A5=E9=99=8D=E3=81=AElauncherParam.h=E3=83=98?= =?UTF-8?q?=E3=83=83=E3=83=80=E3=81=8C=E5=BF=85=E8=A6=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@759 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../sysmenu/ARM9/src/mountInfo.c | 2 +- .../sysmenu/ARM9/src/title.c | 32 +++++++++++-- .../Launcher/ARM9/src/launcher.c | 48 ++++++++++++++++++- build/systemMenu_RED/Launcher/ARM9/src/main.c | 44 ++++++----------- 4 files changed, 89 insertions(+), 37 deletions(-) diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/mountInfo.c b/build/libraries_sysmenu/sysmenu/ARM9/src/mountInfo.c index af0699c8..505eaf6a 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/mountInfo.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/mountInfo.c @@ -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; diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index 4fbfd6e6..489723a8 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -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 );// ヒープの初期化 diff --git a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c index d7b70cad..0a8c3f8b 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c @@ -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 ); diff --git a/build/systemMenu_RED/Launcher/ARM9/src/main.c b/build/systemMenu_RED/Launcher/ARM9/src/main.c index 02b61d48..745542e6 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/main.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/main.c @@ -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 ); + } + } }