mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
本体設定の本体初期化で使用するために、NAMUT_Formatを下記のように拡張し、NAMUT_FormatCoreとする。
・Common eTicketのユーザーアプリのeTicketを消去しないよう選択できる ・WiFi設定を消去しないよう選択できる 既存のNAMUT_Formatは、NandInitializerやSystemUpdater用として、挙動が変わらないよう上記NAMUT_Format をラップした関数とする。 TWLランチャー.mmapの本体初期化部分に上記変更を反映。 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2824 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
e0fefd4684
commit
907660fded
@ -12,8 +12,8 @@
|
|||||||
# in whole or in part, without the prior written consent of Nintendo.
|
# in whole or in part, without the prior written consent of Nintendo.
|
||||||
#
|
#
|
||||||
# $Date:: $
|
# $Date:: $
|
||||||
# $Rev:$
|
# $Rev$
|
||||||
# $Author:$
|
# $Author$
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -27,11 +27,15 @@ TWL_PROC = ARM9
|
|||||||
|
|
||||||
INCDIR = include
|
INCDIR = include
|
||||||
|
|
||||||
|
# es のヘッダを参照します。
|
||||||
|
LINCLUDES += $(ES_ROOT)/twl/include
|
||||||
|
|
||||||
SRCS = namut.c
|
SRCS = namut.c
|
||||||
|
|
||||||
TARGET_LIB = libnamut$(TWL_LIBSUFFIX).a
|
TARGET_LIB = libnamut$(TWL_LIBSUFFIX).a
|
||||||
|
|
||||||
|
|
||||||
|
include $(TWLSDK_ROOT)/add-ins/es/commondefs.es
|
||||||
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
||||||
|
|
||||||
INSTALL_TARGETS = $(TARGETS)
|
INSTALL_TARGETS = $(TARGETS)
|
||||||
@ -46,7 +50,7 @@ CCFLAGS += -DSMALL_CODE_SIZE \
|
|||||||
-DNO_STDIO_H \
|
-DNO_STDIO_H \
|
||||||
-DNO_STDLIB_H
|
-DNO_STDLIB_H
|
||||||
|
|
||||||
do-build: $(TARGETS)
|
do-build: $(TARGETS)
|
||||||
|
|
||||||
include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules
|
include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules
|
||||||
|
|
||||||
|
|||||||
@ -21,6 +21,8 @@
|
|||||||
#include <twl/fatfs.h>
|
#include <twl/fatfs.h>
|
||||||
#include <twl/os/common/format_rom.h>
|
#include <twl/os/common/format_rom.h>
|
||||||
#include <twl/nam.h>
|
#include <twl/nam.h>
|
||||||
|
#include <es.h>
|
||||||
|
#include <estypes.h>
|
||||||
#include <twl/aes.h>
|
#include <twl/aes.h>
|
||||||
#include <twl/os/common/banner.h>
|
#include <twl/os/common/banner.h>
|
||||||
#include <sysmenu/namut.h>
|
#include <sysmenu/namut.h>
|
||||||
@ -32,6 +34,12 @@
|
|||||||
定数定義
|
定数定義
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
// eTicketType
|
||||||
|
typedef enum ETicketType {
|
||||||
|
ETICKET_TYPE_COMMON = 0,
|
||||||
|
ETICKET_TYPE_PERSONALIZED = 1
|
||||||
|
}ETicketType;
|
||||||
|
|
||||||
// 本体初期化(NAND初期化)で消去しないタイトルを
|
// 本体初期化(NAND初期化)で消去しないタイトルを
|
||||||
// TitleProperty (TitleID 32bit)のビットで指定します。
|
// TitleProperty (TitleID 32bit)のビットで指定します。
|
||||||
// どれか1つでもビットが立っていれば消去の対象から外します。
|
// どれか1つでもビットが立っていれば消去の対象から外します。
|
||||||
@ -77,7 +85,7 @@ static u32 sNCFGAddr;
|
|||||||
内部関数宣言
|
内部関数宣言
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
static BOOL NAMUTi_DeleteNonprotectedTitle(void);
|
static BOOL NAMUTi_DeleteNonprotectedTitle( BOOL isForceEraseCommonETicket );
|
||||||
static BOOL NAMUTi_ClearSavedataAll(void);
|
static BOOL NAMUTi_ClearSavedataAll(void);
|
||||||
static BOOL NAMUTi_InitShareData(void);
|
static BOOL NAMUTi_InitShareData(void);
|
||||||
static BOOL NAMUTi_MountAndFormatOtherTitleSaveData(u64 titleID, const char *arcname);
|
static BOOL NAMUTi_MountAndFormatOtherTitleSaveData(u64 titleID, const char *arcname);
|
||||||
@ -87,6 +95,8 @@ static BOOL NAMUTi_ClearWiFiSettings( void );
|
|||||||
static BOOL NAMUTi_DeleteShopAccount( void );
|
static BOOL NAMUTi_DeleteShopAccount( void );
|
||||||
static void* NAMUT_Alloc(u32 size);
|
static void* NAMUT_Alloc(u32 size);
|
||||||
static void NAMUT_Free(void* buffer);
|
static void NAMUT_Free(void* buffer);
|
||||||
|
static s32 GetETicketType(NAMTitleId titleId, ETicketType *pETicketType );
|
||||||
|
static s32 GetTicketViews(ESTicketView** pptv, u32* pNumTicket, NAMTitleId titleId);
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: NAMUT_Init
|
Name: NAMUT_Init
|
||||||
@ -113,19 +123,39 @@ void NAMUT_Init(NAMUTAlloc allocFunc, NAMUTFree freeFunc)
|
|||||||
Name: NAMUT_Format
|
Name: NAMUT_Format
|
||||||
|
|
||||||
Description: 本体初期化(NAND初期化)を行います。
|
Description: 本体初期化(NAND初期化)を行います。
|
||||||
(システム系の必要なファイルのみを残し他を消去します)
|
(システム系の必要なファイルのみを残し他を消去します
|
||||||
|
ユーザーアプリは、common, personalizedに関わらず全て消去します)
|
||||||
|
|
||||||
Arguments: None
|
Arguments: None
|
||||||
|
|
||||||
Returns: None
|
Returns: None
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
BOOL NAMUT_Format(void)
|
BOOL NAMUT_Format( void )
|
||||||
|
{
|
||||||
|
return NAMUT_FormatCore( TRUE, TRUE );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: NAMUT_FormatCore
|
||||||
|
|
||||||
|
Description: 本体初期化(NAND初期化)を行います。
|
||||||
|
(システム系の必要なファイルのみを残し他を消去します
|
||||||
|
ユーザーアプリを common, personalizedに関わらず全て消去するか、
|
||||||
|
personalizedのみ消去するかを引数で選択できます。
|
||||||
|
|
||||||
|
Arguments: isForceEraseCommonETicket: TRUE の時は、common, personalizedに関わらずユーザーアプリを全消去
|
||||||
|
FALSEの時は、commonETicketを残す(アプリ自身は消去)
|
||||||
|
isDeleteWifiSettings: WiFi設定を削除するか?(TRUEで削除)
|
||||||
|
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
BOOL NAMUT_FormatCore( BOOL isForceEraseCommonETicket, BOOL isDeleteWiFiSettings )
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
BOOL ret = TRUE;
|
BOOL ret = TRUE;
|
||||||
|
|
||||||
// プロテクトされていないタイトルの削除を行います
|
// プロテクトされていないタイトルの削除を行います
|
||||||
if (!NAMUTi_DeleteNonprotectedTitle())
|
if (!NAMUTi_DeleteNonprotectedTitle( isForceEraseCommonETicket ))
|
||||||
{
|
{
|
||||||
ret = FALSE;
|
ret = FALSE;
|
||||||
OS_TWarning("Fail! NAMUTi_DeleteNonprotectedTitle()\n");
|
OS_TWarning("Fail! NAMUTi_DeleteNonprotectedTitle()\n");
|
||||||
@ -172,14 +202,15 @@ BOOL NAMUT_Format(void)
|
|||||||
OS_TWarning("NAMUT_DeleteNandDirectory(%s)\n", sDeleteDirectoryList[i]);
|
OS_TWarning("NAMUT_DeleteNandDirectory(%s)\n", sDeleteDirectoryList[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// WiFi設定データをクリアします
|
// WiFi設定データをクリアします
|
||||||
if (!NAMUTi_ClearWiFiSettings())
|
if (isDeleteWiFiSettings &&
|
||||||
|
!NAMUTi_ClearWiFiSettings())
|
||||||
{
|
{
|
||||||
ret = FALSE;
|
ret = FALSE;
|
||||||
OS_TWarning("Fail! NAMUTi_ClearWiFiSettings()\n");
|
OS_TWarning("Fail! NAMUTi_ClearWiFiSettings()\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 本体設定データのクリア
|
// 本体設定データのクリア
|
||||||
if (!NAMUT_ClearTWLSettings( TRUE ))
|
if (!NAMUT_ClearTWLSettings( TRUE ))
|
||||||
{
|
{
|
||||||
@ -346,11 +377,12 @@ BOOL NAMUT_DeleteNandTmpDirectory(void)
|
|||||||
|
|
||||||
Description: User App タイトルの削除を行います。
|
Description: User App タイトルの削除を行います。
|
||||||
|
|
||||||
Arguments: None
|
Arguments: isForceEraseCommonETicket : TRUEの時は、common, personalizedに関わらずユーザーアプリを全消去
|
||||||
|
FALSEの時は、commonETicketを残す(アプリ自身は消去)
|
||||||
|
|
||||||
Returns: None
|
Returns: None
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
static BOOL NAMUTi_DeleteNonprotectedTitle(void)
|
static BOOL NAMUTi_DeleteNonprotectedTitle( BOOL isForceEraseCommonETicket )
|
||||||
{
|
{
|
||||||
char dirPath[NAM_PATH_LEN];
|
char dirPath[NAM_PATH_LEN];
|
||||||
u32 title_num; // NAND にインストールされているアプリの数
|
u32 title_num; // NAND にインストールされているアプリの数
|
||||||
@ -420,12 +452,40 @@ static BOOL NAMUTi_DeleteNonprotectedTitle(void)
|
|||||||
{
|
{
|
||||||
result = FALSE;
|
result = FALSE;
|
||||||
}
|
}
|
||||||
// nand:/ticket/titleID_Hi/ 以下を消去
|
|
||||||
STD_TSNPrintf(dirPath, NAM_PATH_LEN, "nand:/ticket/%08x", NAM_GetTitleIdHi(pTitleIdArray[i]) );
|
// nand:/ticket/titleID_Hi/ 以下を消去
|
||||||
if ( !FS_DeleteDirectoryAuto( dirPath ) )
|
{
|
||||||
{
|
ETicketType eTicketType = ETICKET_TYPE_PERSONALIZED; // default
|
||||||
result = FALSE;
|
|
||||||
}
|
if( isForceEraseCommonETicket ) {
|
||||||
|
// 強制 CommonETicket 消去フラグが有効な場合は、全チケットを消去
|
||||||
|
STD_TSNPrintf(dirPath, NAM_PATH_LEN, "nand:/ticket/%08x", NAM_GetTitleIdHi(pTitleIdArray[i]) );
|
||||||
|
if ( !FS_DeleteDirectoryAuto( dirPath ) )
|
||||||
|
{
|
||||||
|
result = FALSE;
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
// そうでない場合は、CommonETicket 以外のタイトルの eTicket のみ消去
|
||||||
|
if( GetETicketType( pTitleIdArray[i], &eTicketType ) == NAM_OK )
|
||||||
|
{
|
||||||
|
if( eTicketType != ETICKET_TYPE_COMMON )
|
||||||
|
{
|
||||||
|
STD_TSNPrintf(dirPath, NAM_PATH_LEN, "nand:/ticket/%08x/%08x.tik",
|
||||||
|
NAM_GetTitleIdHi(pTitleIdArray[i]),
|
||||||
|
NAM_GetTitleIdLo(pTitleIdArray[i]) );
|
||||||
|
if ( !FS_DeleteFile( dirPath ) &&
|
||||||
|
FS_GetArchiveResultCode( dirPath ) != FS_RESULT_ALREADY_DONE )
|
||||||
|
{
|
||||||
|
result = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1094,3 +1154,94 @@ static void NAMUT_Free(void* buffer)
|
|||||||
spFreeFunc(buffer);
|
spFreeFunc(buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: GetETicketType
|
||||||
|
|
||||||
|
Description: 指定された titleID の eTicket タイプを取得する
|
||||||
|
|
||||||
|
Arguments: titleID: common eTicket かどうかを調べたいタイトルの titleID
|
||||||
|
pETicketType : 結果を格納するESETicketTypeポインタ
|
||||||
|
|
||||||
|
Returns: NAM_OK : 取得成功
|
||||||
|
それ以外: 取得失敗
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
static s32 GetETicketType(NAMTitleId titleId, ETicketType *pETicketType )
|
||||||
|
{
|
||||||
|
s32 result;
|
||||||
|
ESTicketView* ptv;
|
||||||
|
u32 numTicket;
|
||||||
|
|
||||||
|
*pETicketType = ETICKET_TYPE_PERSONALIZED;
|
||||||
|
|
||||||
|
result = GetTicketViews(&ptv, &numTicket, titleId);
|
||||||
|
|
||||||
|
if( result == NAM_OK )
|
||||||
|
{
|
||||||
|
if( numTicket > 0 )
|
||||||
|
{
|
||||||
|
// 先頭 eTicket の deviceId が 0x00000000 なら、common eTicket と判断。
|
||||||
|
// ※全ての eTicket を舐める必要はない?
|
||||||
|
if( ptv->deviceId == 0x00000000 ) {
|
||||||
|
*pETicketType = ETICKET_TYPE_COMMON;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
NAMUT_Free(ptv);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: GetTicketViews
|
||||||
|
|
||||||
|
Description: 指定されたタイトルの eTicket を取得
|
||||||
|
※nam_title.c の GetTicketViews 関数をコピペ
|
||||||
|
|
||||||
|
Arguments: pptv : 取得成功時に eTicket リストのポインタを格納するポインタ
|
||||||
|
pNumTicket : 取得成功時に eTicket 数を格納するポインタ
|
||||||
|
titleID : eTicket を取得したいタイトルの titleID
|
||||||
|
|
||||||
|
Returns: NAM_OK : 取得成功
|
||||||
|
それ以外 : 取得失敗
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
static s32 GetTicketViews(ESTicketView** pptv, u32* pNumTicket, NAMTitleId titleId)
|
||||||
|
{
|
||||||
|
s32 result;
|
||||||
|
u32 numTicket;
|
||||||
|
ESTicketView* ptv = NULL;
|
||||||
|
|
||||||
|
result = ES_GetTicketViews(titleId, NULL, &numTicket);
|
||||||
|
// PRINT_RESULT(result);
|
||||||
|
|
||||||
|
if( result != ES_ERR_OK )
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( numTicket != 0 )
|
||||||
|
{
|
||||||
|
ptv = NAMUT_Alloc(sizeof(ESTicketView) * numTicket);
|
||||||
|
|
||||||
|
if( ptv == NULL )
|
||||||
|
{
|
||||||
|
return NAM_NO_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = ES_GetTicketViews(titleId, ptv, &numTicket);
|
||||||
|
// PRINT_RESULT(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( result == ES_ERR_OK )
|
||||||
|
{
|
||||||
|
*pptv = ptv;
|
||||||
|
*pNumTicket = numTicket;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NAMUT_Free(ptv);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|||||||
@ -282,7 +282,7 @@ int CleanupMachineMain( void )
|
|||||||
|
|
||||||
case MS_FORMATMACHINE_PROCESSING:
|
case MS_FORMATMACHINE_PROCESSING:
|
||||||
// 選択を受け付けない
|
// 選択を受け付けない
|
||||||
if( !NAMUT_Format() ) // <20>‰Šú‰»ŽÀ<C5BD>s
|
if( !NAMUT_FormatCore(FALSE,TRUE) ) // <20>‰Šú‰»ŽÀ<C5BD>s
|
||||||
{
|
{
|
||||||
sState = MS_FORMATMACHINE_ERROR;
|
sState = MS_FORMATMACHINE_ERROR;
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
@ -51,6 +51,21 @@ void NAMUT_Init(NAMUTAlloc allocFunc, NAMUTFree freeFunc);
|
|||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
BOOL NAMUT_Format(void);
|
BOOL NAMUT_Format(void);
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: NAMUT_FormatCore
|
||||||
|
|
||||||
|
Description: 本体初期化(NAND初期化)を行います。
|
||||||
|
(システム系の必要なファイルのみを残し他を消去します
|
||||||
|
ユーザーアプリを common, personalizedに関わらず全て消去するか、
|
||||||
|
personalizedのみ消去するかを引数で選択できます。
|
||||||
|
|
||||||
|
Arguments: isForceEraseCommonETicket: TRUE の時は、common, personalizedに関わらずユーザーアプリを全消去
|
||||||
|
FALSEの時は、commonETicketを残す(アプリ自身は消去)
|
||||||
|
isDeleteWifiSettings: WiFi設定を削除するか?(TRUEで削除)
|
||||||
|
Returns: None
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
BOOL NAMUT_FormatCore( BOOL isForceEraseCommonETicket, BOOL isDeleteWiFiSettings );
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: NAMUT_GetSoftBoxCount
|
Name: NAMUT_GetSoftBoxCount
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user