TwlIPL/build/systemMenu_RED/NandInitializer/ARM9.TWL/src/process_hw_info.c
kamikawa 196826e6af NANDの擬似フォーマット処理に対応。シーン切り替えにフェード効果を追加。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@626 b08762b0-b915-fc4b-9d8c-17b2551a87ff
2008-02-08 08:56:10 +00:00

659 lines
19 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*---------------------------------------------------------------------------*
Project: TwlSDK - NandInitializer
File: process_hw_info.c
Copyright 2008 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#include <twl.h>
#include <nitro/snd.h>
#include <twl/fatfs.h>
#include <twl/lcfg.h>
#include <nitro/card.h>
#include "kami_font.h"
#include "kami_pxi.h"
#include "process_topmenu.h"
#include "process_hw_info.h"
#include "process_auto.h"
#include "process_fade.h"
#include "cursor.h"
#include "keypad.h"
#include <sysmenu/acsign.h>
//#include <sysmenu/settings/common/TWLHWInfo.h>
//#include <sysmenu/settings/common/TWLSettings.h>
//
#include "TWLHWInfo_api.h"
#include "TWLSettings_api.h"
//
/*---------------------------------------------------------------------------*
Œ^’è‹`
*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*
è<E28099>è`
*---------------------------------------------------------------------------*/
#define NUM_OF_MENU_SELECT 8
#define DOT_OF_MENU_SPACE 16
#define CHAR_OF_MENU_SPACE 2
#define CURSOR_ORIGIN_X 32
#define CURSOR_ORIGIN_Y 56
static const u32 s_langBitmapList[ LCFG_TWL_REGION_MAX ] = {
LCFG_TWL_LANG_BITMAP_JAPAN,
LCFG_TWL_LANG_BITMAP_AMERICA,
LCFG_TWL_LANG_BITMAP_EUROPE,
LCFG_TWL_LANG_BITMAP_AUSTRALIA,
LCFG_TWL_LANG_BITMAP_CHINA,
LCFG_TWL_LANG_BITMAP_KOREA,
};
static char *strLanguage[] = {
(char *)"LANG_JAPANESE",
(char *)"LANG_ENGLISH",
(char *)"LANG_FRENCH",
(char *)"LANG_GERMAN",
(char *)"LANG_ITALIAN",
(char *)"LANG_SPANISH",
(char *)"LANG_CHINESE",
(char *)"LANG_KOREAN",
};
static const char *strRegion[] = {
"JAPAN",
"AMERICA",
"EUROPE",
"AUSTRALIA",
"CHINA",
"KOREA",
};
static const char *strLauncherGameCode[] = {
"LNCJ",
"LNCE",
"LNCP",
"LNCO",
"LNCC",
"LNCK",
};
/*---------------------------------------------------------------------------*
“à•”•Ï<E280A2>è`
*---------------------------------------------------------------------------*/
static s8 sMenuSelectNo;
static u8 *s_pPrivKeyBuffer = NULL;
static LCFGReadResult (*s_pReadSecureInfoFunc)( void );
static BOOL s_isReadTSD;
/*---------------------------------------------------------------------------*
“à•”ŠÖ<C5A0><EFBFBD>錾
*---------------------------------------------------------------------------*/
void HWInfoWriterInit( void );
static void ReadTWLSettings( void );
static void ModifyLanguage( u8 region );
static void ReadPrivateKey( void );
static void ReadHWInfoFile( void );
static void VerifyHWInfo( void );
static BOOL WriteHWInfoFile( u8 region );
static BOOL WriteHWNormalInfoFile( void );
static BOOL WriteHWSecureInfoFile( u8 region );
static BOOL DeleteHWInfoFile( void );
const LCFGTWLHWNormalInfo *LCFG_THW_GetDefaultNormalInfo( void );
const LCFGTWLHWSecureInfo *LCFG_THW_GetDefaultSecureInfo( void );
const LCFGTWLHWNormalInfo *LCFG_THW_GetNormalInfo( void );
const LCFGTWLHWSecureInfo *LCFG_THW_GetSecureInfo( void );
/*---------------------------------------------------------------------------*
ƒvƒ<76>ƒZƒXŠÖ<C5A0>è`
*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*
Name: HWInfo ƒvƒ<76>ƒZƒXO
Description:
Arguments: None.
Returns: next sequence
*---------------------------------------------------------------------------*/
void* HWInfoProcess0(void)
{
int i;
// •¶Žš—ñSƒNƒŠƒA
kamiFontClear();
// ƒo<C692>[ƒWƒ‡ƒ“•\ަ
kamiFontPrintf(2, 1, FONT_COLOR_BLACK, "Write Hardware Information ");
kamiFontPrintf(0, 2, FONT_COLOR_BLACK, "--------------------------------");
// ƒ<>ƒjƒ…<C692>[ˆê——
kamiFontPrintf(3, 6, FONT_COLOR_BLACK, "+--------------------+----+");
kamiFontPrintf(3, 7, FONT_COLOR_BLACK, "l REGION JAPAN l l");
kamiFontPrintf(3, 8, FONT_COLOR_BLACK, "+--------------------+----+");
kamiFontPrintf(3, 9, FONT_COLOR_BLACK, "l REGION AMERICA l l");
kamiFontPrintf(3, 10, FONT_COLOR_BLACK, "+--------------------+----+");
kamiFontPrintf(3, 11, FONT_COLOR_BLACK, "l REGION EUROPE l l");
kamiFontPrintf(3, 12, FONT_COLOR_BLACK, "+--------------------+----+");
kamiFontPrintf(3, 13, FONT_COLOR_BLACK, "l REGION AUSTRALIA l l");
kamiFontPrintf(3, 14, FONT_COLOR_BLACK, "+--------------------+----+");
kamiFontPrintf(3, 15, FONT_COLOR_BLACK, "l REGION CHINA l l");
kamiFontPrintf(3, 16, FONT_COLOR_BLACK, "+--------------------+----+");
kamiFontPrintf(3, 17, FONT_COLOR_BLACK, "l REGION KOREA l l");
kamiFontPrintf(3, 18, FONT_COLOR_BLACK, "+--------------------+----+");
kamiFontPrintf(3, 19, FONT_COLOR_BLACK, "l DELETE l l");
kamiFontPrintf(3, 20, FONT_COLOR_BLACK, "+--------------------+----+");
kamiFontPrintf(3, 21, FONT_COLOR_BLACK, "l RETURN l l");
kamiFontPrintf(3, 22, FONT_COLOR_BLACK, "+--------------------+----+");
// ”wŒiSƒNƒŠƒA
for (i=0;i<24;i++)
{
kamiFontFillChar( i, BG_COLOR_TRANS, BG_COLOR_TRANS );
}
// ”wŒi<C592>ã•”
kamiFontFillChar( 0, BG_COLOR_PURPLE, BG_COLOR_PURPLE );
kamiFontFillChar( 1, BG_COLOR_PURPLE, BG_COLOR_PURPLE );
kamiFontFillChar( 2, BG_COLOR_PURPLE, BG_COLOR_TRANS );
// ƒJ<C692>[ƒ\ƒ<C692>œŠO
SetCursorPos((u16)200, (u16)200);
// O<E28098>€”õ
HWInfoWriterInit();
FADE_IN_RETURN( HWInfoProcess1 );
}
/*---------------------------------------------------------------------------*
Name: HWInfo ƒvƒ<76>ƒZƒXP
Description:
Arguments: None.
Returns: next sequence
*---------------------------------------------------------------------------*/
void* HWInfoProcess1(void)
{
// ƒI<C692>[ƒgŽÀ<C5BD>s—p
if (gAutoFlag)
{
sMenuSelectNo = 0;
return HWInfoProcess2;
}
// Iðƒ<C3B0>ƒjƒ…<C692>[Ì•Ï<E280A2>X
if ( kamiPadIsRepeatTrigger(PAD_KEY_UP) )
{
if (--sMenuSelectNo < 0) sMenuSelectNo = NUM_OF_MENU_SELECT -1;
}
else if ( kamiPadIsRepeatTrigger(PAD_KEY_DOWN) )
{
if (++sMenuSelectNo >= NUM_OF_MENU_SELECT) sMenuSelectNo = 0;
}
// ƒJ<C692>[ƒ\ƒ”zu
SetCursorPos((u16)CURSOR_ORIGIN_X, (u16)(CURSOR_ORIGIN_Y + sMenuSelectNo * DOT_OF_MENU_SPACE));
// Œˆ’è
if (kamiPadIsTrigger(PAD_BUTTON_A))
{
return HWInfoProcess2;
}
// ƒgƒbƒvƒ<76>ƒjƒ…<C692>[‚Ö–ß‚é
else if (kamiPadIsTrigger(PAD_BUTTON_B))
{
FADE_OUT_RETURN( TopmenuProcess0 );
}
return HWInfoProcess1;
}
/*---------------------------------------------------------------------------*
Name: HWInfo ƒvƒ<76>ƒZƒXQ
Description:
Arguments: None.
Returns: next sequence
*---------------------------------------------------------------------------*/
void* HWInfoProcess2(void)
{
int i;
BOOL result;
switch( sMenuSelectNo )
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
OS_TPrintf( "Write Start.\n" );
result = WriteHWInfoFile( (u8)sMenuSelectNo );
break;
case 6:
OS_TPrintf( "Delete start.\n" );
result = DeleteHWInfoFile();
break;
case 7:
FADE_OUT_RETURN( TopmenuProcess0 );
}
// ‰ÊðƒNƒŠƒA
for (i=0;i<NUM_OF_MENU_SELECT;i++)
{
kamiFontPrintf(26, (s16)(7+i*CHAR_OF_MENU_SPACE), FONT_COLOR_BLACK, " ");
}
// <20>¡‰ñÌŒ‰Êð•\ަ
if ( result == TRUE )
{
kamiFontPrintf(26, (s16)(7+sMenuSelectNo*CHAR_OF_MENU_SPACE), FONT_COLOR_GREEN, "OK");
}
else
{
kamiFontPrintf(26, (s16)(7+sMenuSelectNo*CHAR_OF_MENU_SPACE), FONT_COLOR_RED, "NG");
}
// Auto—p
if (gAutoFlag)
{
if (result) { FADE_OUT_RETURN( AutoProcess1 ); }
else { FADE_OUT_RETURN( AutoProcess2 ); }
}
return HWInfoProcess1;
}
/*---------------------------------------------------------------------------*
<20>ˆ<CB86>ŠÖ<C5A0>è`
*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*
Name: HW<48>î•ñƒ‰ƒCƒ^<5E>[Ì<E2809A>‰Šú‰»
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void HWInfoWriterInit( void )
{
// PutStringUTF16( 1 * 8, 0 * 8, TXT_COLOR_BLUE, (const u16 *)L"HW Info Writer");
// GetAndDrawRTCData( &g_rtcDraw, TRUE );
ACSign_SetAllocFunc( OS_AllocFromMain, OS_FreeToMain );
ReadTWLSettings();
ReadPrivateKey();
ReadHWInfoFile();
// VerifyHWInfo();
OS_Printf("region = %d\n", LCFG_THW_GetRegion() );
// s_csr = 0;
// DrawMenu( s_csr, &s_writerParam );
// GXS_SetVisiblePlane( GX_PLANEMASK_BG0 );
// GX_DispOn();
// GXS_DispOn();
}
/*---------------------------------------------------------------------------*
Name: TWL<57>Ýèƒf<C692>[ƒ^̃Š<C692>[ƒh
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static void ReadTWLSettings( void )
{
s_isReadTSD = LCFGi_TSD_ReadSettings();
if( s_isReadTSD ) {
OS_TPrintf( "TSD read succeeded.\n" );
}else {
OS_TPrintf( "TSD read failed.\n" );
}
}
/*---------------------------------------------------------------------------*
Name: Œ¾ŒêƒR<C692>[ƒhðƒŠ<C692>[ƒWƒ‡ƒ“lÉ<E2809A>í¹Ä<E2809A>C<EFBFBD>³·é<E2809A>B
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static void ModifyLanguage( u8 region )
{
u32 langBitmap = s_langBitmapList[ region ];
u8 nowLanguage = LCFG_TSD_GetLanguage();
// TSDª“ÇÝ<E2809A>žßĢȢÈç<E2809A>A‰½à¹¸ƒŠƒ^<5E>[ƒ“
if( !s_isReadTSD ) {
return;
}
if( langBitmap & ( 0x0001 << nowLanguage ) ) {
OS_TPrintf( "Language no change.\n" );
}else {
int i;
for( i = 0; i < LCFG_TWL_LANG_CODE_MAX; i++ ) {
if( langBitmap & ( 0x0001 << i ) ) {
break;
}
}
LCFG_TSD_SetLanguage( (LCFGTWLLangCode)i );
LCFG_TSD_SetFlagCountry( FALSE ); // <20>¦Â¢ÅÉ<E2809A>ƒR<C692>[ƒhàƒNƒŠƒAµÄ¨­<E2809A>B
LCFG_TSD_SetCountry( LCFG_TWL_COUNTRY_UNDEFINED );
LCFGi_TSD_WriteSettings();
OS_TPrintf( "Language Change \"%s\" -> \"%s\"\n",
strLanguage[ nowLanguage ], strLanguage[ LCFG_TSD_GetLanguage() ] );
}
}
/*---------------------------------------------------------------------------*
Name: ”é§Œ®ÌƒŠ<C692>[ƒh
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static void ReadPrivateKey( void )
{
BOOL result = FALSE;
u32 keyLength;
FSFile file;
OSTick start = OS_GetTick();
FS_InitFile( &file );
if( !FS_OpenFileEx( &file, "rom:key/private_HWInfo.der", FS_FILEMODE_R ) ) {
kamiFontPrintfConsoleEx(CONSOLE_RED, "PrivateKey read failed.\n" );
}else {
keyLength = FS_GetFileLength( &file );
if( keyLength > 0 ) {
s_pPrivKeyBuffer = OS_Alloc( keyLength );
if( FS_ReadFile( &file, s_pPrivKeyBuffer, (s32)keyLength ) == keyLength ) {
OS_TPrintf( "PrivateKey read succeeded.\n" );
result = TRUE;
}else {
kamiFontPrintfConsoleEx(CONSOLE_RED, "PrivateKey read failed.\n" );
}
}
FS_CloseFile( &file );
}
if( !result && s_pPrivKeyBuffer ) {
OS_Free( s_pPrivKeyBuffer );
s_pPrivKeyBuffer = NULL;
}
OS_TPrintf( "PrivKey read time = %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
#ifdef USE_PRODUCT_KEY
// <20>»•i—p”é§Œ®ª—LŒøÈç<E2809A>A<EFBFBD><41>¼ è̃AƒNƒZƒX
s_pReadSecureInfoFunc = LCFGi_THW_ReadSecureInfo;
#else
// »¤ÅÈ¢Èç<E2809A>A<EFBFBD><41>¼ÈµÌƒAƒNƒZƒX
s_pReadSecureInfoFunc = LCFGi_THW_ReadSecureInfo_NoCheck;
// PutStringUTF16( 14 * 8, 0 * 8, TXT_COLOR_RED, (const u16 *)L"[No Signature MODE]" );
#endif
}
/*---------------------------------------------------------------------------*
Name: HW<48>î•ñSÌ̃Š<C692>[ƒh
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static void ReadHWInfoFile( void )
{
LCFGReadResult retval;
OSTick start = OS_GetTick();
retval = LCFGi_THW_ReadNormalInfo();
if( retval == LCFG_TSF_READ_RESULT_SUCCEEDED ) {
OS_Printf("HW Normal Info read succeeded.\n" );
}else {
kamiFontPrintfConsoleEx(0, "HW Normal Info read failed.\n" );
}
OS_TPrintf( "HW Normal Info read time = %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
start = OS_GetTick();
retval = s_pReadSecureInfoFunc();
if( retval == LCFG_TSF_READ_RESULT_SUCCEEDED ) {
OS_Printf("HW Secure Info read succeeded.\n" );
}else {
kamiFontPrintfConsoleEx(0, "HW Secure Info read failed.\n" );
}
OS_TPrintf( "HW Secure Info read time = %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
}
/*---------------------------------------------------------------------------*
Name: HW<48>î•ñSÌ̃‰ƒCƒg
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static BOOL WriteHWInfoFile( u8 region )
{
static const u16 *pMsgNormalWriting = (const u16 *)L"Writing Normal File...";
static const u16 *pMsgSecureWriting = (const u16 *)L"Writing Secure File...";
static const u16 *pMsgSucceeded = (const u16 *)L"Succeeded!";
static const u16 *pMsgFailed = (const u16 *)L"Failed!";
BOOL result = TRUE;
// ƒm<C692>[ƒ}ƒƒtƒ@ƒCƒÌƒ‰ƒCƒg
// (void)PutStringUTF16( MSG_X * 8, MSG_Y * 8, TXT_COLOR_BLACK, pMsgNormalWriting );
if( WriteHWNormalInfoFile() ) {
// (void)PutStringUTF16( ( MSG_X + 18 ) * 8, MSG_Y * 8, TXT_COLOR_BLUE, pMsgSucceeded );
}else {
// (void)PutStringUTF16( ( MSG_X + 18 ) * 8, MSG_Y * 8, TXT_COLOR_RED, pMsgFailed );
result = FALSE;
}
// ƒZƒLƒ…ƒAƒtƒ@ƒCƒÌƒ‰ƒCƒg
// (void)PutStringUTF16( MSG_X * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_BLACK, pMsgSecureWriting );
if( WriteHWSecureInfoFile( region ) ) {
// (void)PutStringUTF16( ( MSG_X + 18 ) * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_BLUE, pMsgSucceeded );
}else {
// (void)PutStringUTF16( ( MSG_X + 18 ) * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_RED, pMsgFailed );
result = FALSE;
}
ModifyLanguage( region );
// ƒ<>ƒbƒZ<C692>[ƒWðˆê莞ŠÔ•\ަµÄ<E2809A>ÁŽ
// DispMessage( 0, 0, TXT_COLOR_NULL, NULL );
// NNS_G2dCharCanvasClearArea( &gCanvas, TXT_COLOR_WHITE,
// MSG_X * 8 , MSG_Y * 8, ( 32 - MSG_X ) * 8, ( MSG_Y + 4 ) * 8 );
return result;
}
/*---------------------------------------------------------------------------*
Name: HWƒm<C692>[ƒ}ƒInfoƒtƒ@ƒCƒÌƒ‰ƒCƒg
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static BOOL WriteHWNormalInfoFile( void )
{
BOOL isWrite = TRUE;
LCFGReadResult result;
result = LCFGi_THW_ReadNormalInfo();
if( result != LCFG_TSF_READ_RESULT_SUCCEEDED ) {
if( !LCFGi_THW_RecoveryNormalInfo( result ) ) {
kamiFontPrintfConsoleEx(CONSOLE_RED, "HW Normal Info Recovery failed.\n" );
isWrite = FALSE;
}
}
if( isWrite &&
!LCFGi_THW_WriteNormalInfo() ) {
kamiFontPrintfConsoleEx(CONSOLE_RED, "HW Normal Info Write failed.\n" );
}
return isWrite;
}
/*---------------------------------------------------------------------------*
Name: HWƒZƒLƒ…ƒAInfoƒtƒ@ƒCƒÌƒ‰ƒCƒg
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static BOOL WriteHWSecureInfoFile( u8 region )
{
BOOL isWrite = TRUE;
LCFGReadResult result;
// ƒtƒ@ƒCƒÌƒŠ<C692>[ƒh
result = s_pReadSecureInfoFunc();
// ƒŠ<C692>[ƒhÉŽ¸”sµ½çƒŠƒJƒoƒŠ
if( result != LCFG_TSF_READ_RESULT_SUCCEEDED ) {
if( !LCFGi_THW_RecoverySecureInfo( result ) ) {
kamiFontPrintfConsoleEx(CONSOLE_RED, "HW Secure Info Recovery failed.\n" );
isWrite = FALSE;
}
}
// ƒŠ<C692>[ƒWƒ‡ƒ“̃Zƒbƒg
LCFG_THW_SetRegion( region );
// ΉžŒ¾Œêƒrƒbƒgƒ}ƒbƒṽZƒbƒg
LCFG_THW_SetValidLanguageBitmap( s_langBitmapList[ region ] );
// [TODO:]—ÊŽY<C5BD>HöÅȢƃVƒŠƒAƒNo.Í—pˆÓūȢÌÅ<E2809A>A±±ÅÍMACƒAƒhƒŒƒXðàÆÉ“K“ÈlðƒZƒbƒg·é<E2809A>B
// ƒVƒŠƒAƒNo.̃Zƒbƒg
{
u8 buffer[ 12 ] = "SERIAL"; // “K“È•¶Žš—ñðMACƒAƒhƒŒƒXÆŒ<C592>µÄSHA1ðŽæè<E2809A>A‰¼SerialNoÆ·é<E2809A>B
u8 serialNo[ SVC_SHA1_DIGEST_SIZE ];
int i;
int len = ( LCFG_THW_GetRegion() == LCFG_TWL_REGION_AMERICA ) ?
LCFG_TWL_HWINFO_SERIALNO_LEN_AMERICA : LCFG_TWL_HWINFO_SERIALNO_LEN_OTHERS;
OS_GetMacAddress( buffer + 6 );
SVC_CalcSHA1( serialNo, buffer, sizeof(buffer) );
for( i = 3; i < SVC_SHA1_DIGEST_SIZE; i++ ) {
serialNo[ i ] = (u8)( ( serialNo[ i ] % 10 ) + 0x30 );
}
MI_CpuCopy8( "SRN", serialNo, 3 );
MI_CpuClear8( &serialNo[ len ], sizeof(serialNo) - len );
OS_TPrintf( "serialNo : %s\n", serialNo );
LCFG_THW_SetSerialNo( serialNo );
}
// ƒ‰ƒ“ƒ`ƒƒ<C692>[TitleID_LõZƒbƒg
{
int i;
u8 titleID_Lo[4];
for( i = 0; i < 4; i++ ) titleID_Lo[ i ] = (u8)strLauncherGameCode[ region ][ 4 - i - 1 ];
LCFG_THW_SetLauncherTitleID_Lo( (const u8 *)titleID_Lo );
}
// ƒ‰ƒCƒg
if( isWrite &&
!LCFGi_THW_WriteSecureInfo( s_pPrivKeyBuffer ) ) {
isWrite = FALSE;
kamiFontPrintfConsoleEx(CONSOLE_RED, "HW Secure Info Write failed.\n" );
}
return isWrite;
}
/*---------------------------------------------------------------------------*
Name: HWInfoƒtƒ@ƒCƒÌ<E2809A>í<EFBFBD>œ
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static BOOL DeleteHWInfoFile( void )
{
static const u16 *pMsgNormalDeleting = (const u16 *)L"Deleting Normal File...";
static const u16 *pMsgSecureDeleting = (const u16 *)L"Deteting Secure File...";
static const u16 *pMsgSucceeded = (const u16 *)L"Succeeded!";
static const u16 *pMsgFailed = (const u16 *)L"Failed!";
BOOL result = TRUE;
// ƒm<C692>[ƒ}ƒƒtƒ@ƒCƒ
// (void)PutStringUTF16( MSG_X * 8, MSG_Y * 8, TXT_COLOR_BLACK, pMsgNormalDeleting );
if( FS_DeleteFile( (char *)LCFG_TWL_HWINFO_NORMAL_PATH ) ) {
OS_TPrintf( "%s delete succeeded.\n", (char *)LCFG_TWL_HWINFO_NORMAL_PATH );
// (void)PutStringUTF16( ( MSG_X + 19 ) * 8, MSG_Y * 8, TXT_COLOR_BLUE, pMsgSucceeded );
}else {
OS_TPrintf( "%s delete failed.\n", (char *)LCFG_TWL_HWINFO_NORMAL_PATH );
// (void)PutStringUTF16( ( MSG_X + 19 ) * 8, MSG_Y * 8, TXT_COLOR_RED, pMsgFailed );
result = FALSE;
}
// ƒZƒLƒ…ƒAƒtƒ@ƒCƒ
// (void)PutStringUTF16( MSG_X * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_BLACK, pMsgSecureDeleting );
if( FS_DeleteFile( (char *)LCFG_TWL_HWINFO_SECURE_PATH ) ) {
OS_TPrintf( "%s delete succeeded.\n", (char *)LCFG_TWL_HWINFO_SECURE_PATH );
// (void)PutStringUTF16( ( MSG_X + 19 ) * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_BLUE, pMsgSucceeded );
}else {
OS_TPrintf( "%s delete failed.\n", (char *)LCFG_TWL_HWINFO_SECURE_PATH );
// (void)PutStringUTF16( ( MSG_X + 19 ) * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_RED, pMsgFailed );
result = FALSE;
}
// DispMessage( 0, 0, TXT_COLOR_NULL, NULL );
// NNS_G2dCharCanvasClearArea( &gCanvas, TXT_COLOR_WHITE,
// MSG_X * 8 , MSG_Y * 8, ( 32 - MSG_X ) * 8, ( MSG_Y + 4 ) * 8 );
return result;
}