From 3852c2067e7fa896088b5a82d7aecc17333bfe64 Mon Sep 17 00:00:00 2001 From: yoshida_teruhisa Date: Mon, 28 Jan 2008 08:01:23 +0000 Subject: [PATCH] =?UTF-8?q?TEMP=E3=83=96=E3=83=BC=E3=83=88=E9=96=A2?= =?UTF-8?q?=E4=BF=82=E5=87=A6=E7=90=86=E3=81=AE=E8=BF=BD=E5=8A=A0=20?= =?UTF-8?q?=E3=83=98=E3=83=83=E3=83=80=E3=81=AETitleID=E6=A4=9C=E8=A8=BC?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=82=92=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=82=A2=E3=82=A6=E3=83=88=E3=81=97=E3=81=9F=E5=BD=A2=E3=81=A7?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=20TEMP=E3=83=96=E3=83=BC=E3=83=88=E3=81=A7?= =?UTF-8?q?=E3=81=AA=E3=81=91=E3=82=8C=E3=81=B0tmp=E3=83=95=E3=82=A9?= =?UTF-8?q?=E3=83=AB=E3=83=80=E3=81=AE=E4=B8=AD=E3=81=AEsrl=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E3=82=92=E5=89=8A=E9=99=A4?= 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@528 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../sysmenu/ARM9/src/title.c | 12 +++++ build/systemMenu_RED/Launcher/ARM9/src/main.c | 46 ++++++++++++++++++- build/tests/ExecTmpApp/ARM9/src/ExecTmpApp.c | 39 +++++++++++++++- 3 files changed, 93 insertions(+), 4 deletions(-) diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c index ed710c29..c826870f 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/title.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/title.c @@ -328,11 +328,23 @@ OS_TPrintf("RebootSystem failed: logo CRC error\n"); return; } + if( header[0x12] && 0x03 == 0 ) { //NTR専用ROM isTwlApp = FALSE; } + /* + else if( pBootTitle->titleID != *((NAMTitleId *)(&header[0x230])) ) + { + //TWL対応ROMで、ヘッダのtitleIDが起動指定されたIDと違う +OS_TPrintf("RebootSystem failed: header TitleID error\n"); +OS_TPrintf("RebootSystem failed: selectedTitleID=%.16llx\n",pBootTitle->titleID); +OS_TPrintf("RebootSystem failed: headerTitleID=%.16llx\n",*((NAMTitleId *)(&header[0x230]))); + FS_CloseFile(file); + return; + } + */ // 各領域を読み込む source [region_header ] = 0x00000000; diff --git a/build/systemMenu_RED/Launcher/ARM9/src/main.c b/build/systemMenu_RED/Launcher/ARM9/src/main.c index db244911..99212ddf 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/main.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/main.c @@ -27,6 +27,7 @@ // function's prototype------------------------------------------------------- static void INTR_VBlank( void ); +static void deleteTmp(); // global variable------------------------------------------------------------- @@ -117,8 +118,11 @@ void TwlMain( void ) (void)SYSM_GetCardTitleList( s_titleList ); // カードアプリリストの取得(カードアプリはs_titleList[0]に格納される) - // TODO:bootTypeがLAUNCHER_BOOTTYPE_TEMPでない場合、tmpフォルダ内のデータを消す - + // bootTypeがLAUNCHER_BOOTTYPE_TEMPでない場合、tmpフォルダ内のデータを消す + if( !pBootTitle || pBootTitle->flags.bootType != LAUNCHER_BOOTTYPE_TEMP ) + { + deleteTmp(); + } // 「ダイレクトブートでない」なら if( !pBootTitle ) { @@ -260,3 +264,41 @@ static void INTR_VBlank(void) OS_SetIrqCheckFlag(OS_IE_V_BLANK); // Vブランク割込チェックのセット } +// ============================================================================ +// ディレクトリ操作 +// ============================================================================ + +// 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); +} \ No newline at end of file diff --git a/build/tests/ExecTmpApp/ARM9/src/ExecTmpApp.c b/build/tests/ExecTmpApp/ARM9/src/ExecTmpApp.c index 6162b7e1..cd8576e2 100644 --- a/build/tests/ExecTmpApp/ARM9/src/ExecTmpApp.c +++ b/build/tests/ExecTmpApp/ARM9/src/ExecTmpApp.c @@ -129,8 +129,12 @@ static void MenuScene(void) BOOL success = TRUE; FSFile src,dest; void *buf; + ROM_FAT *fat; + void *nstart, *nend; + u32 st,ed; switch( s_csr ) { case 0: + STD_TSNPrintf( destfilename, 31, "nand:/tmp/%.16llx.srl", targetApp ); // tmpに保存 FS_DeleteFile(destfilename); @@ -138,12 +142,42 @@ static void MenuScene(void) FS_InitFile( &src ); FS_InitFile( &dest ); if ( !FS_OpenFileEx( &src, "rom:/data/simple.srl", FS_FILEMODE_R ) ) success = FALSE; + //if ( !FS_OpenFileEx( &src, "rom:/data/NTR_IPL_font_m.NFTR", FS_FILEMODE_R ) ) success = FALSE; len = (int)FS_GetFileLength( &src ); - buf = (void *)0x02400000;// 適当にあいてるところ - llen = FS_ReadFile( &src, buf, len ); + nstart = OS_InitAlloc( OS_ARENA_MAIN, (void *)0x2800000, (void *)0x2b00000, 1 ); + // アリーナの下位境界アドレス + OS_SetMainArenaLo( nstart ); + // fat関係調査 + nend = (void *)((int)nstart+FS_GetTableSize()+10000); + fat = OS_AllocFixed( OS_ARENA_MAIN, &nstart, &nend ); + FS_UnloadTable(); + FS_LoadTable( fat, FS_GetTableSize() ); + //FS_ConvertPathToFileID( &fid, "rom:/data/simple.srl" ); + st = fat[1].top.offset; + ed = fat[1].bottom.offset; + + buf = (void *)0x2400000; + PrintfSJIS( 1 * 8, 2 * 8, TXT_COLOR_RED, "fat:%x,%x,%x,%x",fat[0].top.offset,fat[0].bottom.offset,st,ed); + PrintfSJIS( 11 * 8, 0 * 8, TXT_COLOR_RED, "読み込み開始 %x",(int)len); + for(llen = 0; llen < len; ) + { + int rd; + rd = FS_ReadFile( &src, buf, len ); + if(rd == -1) + { + success = FALSE; + break; + } + PrintfSJIS( 1 * 8, 4 * 8, TXT_COLOR_WHITE, "読み込み中... %xBYTES",(int)llen); + buf = (void *)((u32)buf + rd); + llen += rd; + PrintfSJIS( 1 * 8, 4 * 8, TXT_COLOR_RED, "読み込み中... %xBYTES",(int)llen); + } + buf = (void *)0x2400000; if ( !FS_CloseFile( &src ) ) success = FALSE; if (len != llen) success = FALSE; + PrintfSJIS( 1 * 8, 6 * 8, TXT_COLOR_RED, "読み込み完了 %x",(int)llen); if ( !FS_OpenFileEx( &dest, destfilename, FS_FILEMODE_W ) ) success = FALSE; llen = FS_WriteFile( &dest, buf, len ); @@ -151,6 +185,7 @@ static void MenuScene(void) if (len != llen) success = FALSE; if( !success ) break; + //アプリ起動 OS_SetLauncherParamAndResetHardware( 0, targetApp, &tempflag ); break;